Выбор ответа Junior Состояние и данные обновлено
Zustand: селекторы
Вопрос
Почему в Zustand пишут useCart((s) => s.count), а не useCart()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: С селектором перерисовка только при изменении count, без него при любом изменении. Zustand сравнивает результат селектора с предыдущим (по Object.is) и перерисовывает только при отличии. useCart() без аргумента возвращает весь стор, и любое изменение вызовет перерисовку.
Варианты ответа
- Без селектора хук вообще не работает и возвращает
undefined - С селектором перерисовка только при изменении
count, без него при любом измененииправильный ответ - Селектор дополнительно кеширует выбранное значение на диск между запусками
- Без селектора стор сбрасывается к начальному состоянию при каждом рендере компонента
Разбор
Zustand сравнивает результат селектора с предыдущим (по Object.is) и перерисовывает только при отличии. useCart() без аргумента возвращает весь стор, и любое изменение вызовет перерисовку. Если селектор возвращает новый объект или массив на каждый вызов, нужна поверхностная проверка (useShallow). Хранение на диск делает middleware persist.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.