React · Middle · Pytanie 40 z 75
Dlaczego ten selektor powoduje re-render przy każdej akcji w store?
const done = useSelector(state =>
state.todos.filter(t => t.done)
);- ✓Poprawna odpowiedź:
filterza każdym razem zwraca nową tablicę - 2
useSelectorzawsze przerenderowuje przy każdej akcji - 3
filterjest zbyt wolny, by wywoływać go w selektorze
Wyjaśnienie
useSelector uruchamia się po każdym dispatchu i porównuje wynik po referencji. Nowa tablica nigdy nie jest równa poprzedniej. Rozwiązaniem jest memoizowany selektor createSelector, który zwraca tę samą tablicę, dopóki state.todos się nie zmienił.