Zarządzanie stanem · Senior · Pytanie 13 z 75
Czego potrzebuje zmemoizowany selektor z createSelector, by był wydajny z argumentami?
const selectByCategory = createSelector(
[(s) => s.products, (s, category) => category],
(products, category) => products.filter((p) => p.category === category),
);- ✓Poprawna odpowiedź: Wejść o stabilnych referencjach; osobnej instancji selektora na argument, jeśli używa się go w wielu miejscach
- 2Owinięcia każdego wejścia w
useMemo - 3Zwracania nowej tablicy z każdego selektora wejściowego
Wyjaśnienie
Domyślny cache pamięta ostatnie wejścia, więc przeplatanie argumentów w kilku komponentach ('books', 'toys') za każdym razem przelicza wynik. Twórz selektor na komponent (useMemo(makeSelector, [])) albo skonfiguruj większy cache (weakMapMemoize - domyślny w Reselect 5).