Керування станом · Senior · Запитання 13 з 75
Що потрібно мемоізованому селектору з createSelector, щоб він був ефективним з аргументами?
const selectByCategory = createSelector(
[(s) => s.products, (s, category) => category],
(products, category) => products.filter((p) => p.category === category),
);- ✓Правильна відповідь: Входи зі стабільними посиланнями; окремий екземпляр селектора на кожен аргумент, якщо він використовується в багатьох місцях
- 2Обгорнути кожен вхід у
useMemo - 3Повертати новий масив з кожного вхідного селектора
Пояснення
Кеш за замовчуванням зберігає останні входи, тому чергування аргументів у кількох компонентах ('books', 'toys') щоразу перераховує результат. Створюйте селектор на компонент (useMemo(makeSelector, [])) або налаштуйте більший кеш (weakMapMemoize - за замовчуванням у Reselect 5).