React · Middle · Frage 40 von 75
Warum löst dieser Selektor bei jeder Action im Store ein Re-Rendering aus?
const done = useSelector(state =>
state.todos.filter(t => t.done)
);- 1
useSelectorrendert bei jeder Action immer neu - 2
filterist zu langsam, um es in einem Selektor aufzurufen - 3
filtergibt jedes Mal ein neues Array zurück
Antwort zeigen
Richtige Antwort: filter gibt jedes Mal ein neues Array zurück
Erklärung
useSelector läuft nach jedem Dispatch und vergleicht das Ergebnis per Referenz. Ein neues Array ist nie gleich dem vorherigen. Die Lösung ist ein memoisierter Selektor mit createSelector, der dasselbe Array zurückgibt, solange sich state.todos nicht geändert hat.