Выбор ответа Junior Состояние и данные обновлено

Zustand: селекторы

Вопрос

Почему в Zustand пишут useCart((s) => s.count), а не useCart()?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: С селектором перерисовка только при изменении count, без него при любом изменении. Zustand сравнивает результат селектора с предыдущим (по Object.is) и перерисовывает только при отличии. useCart() без аргумента возвращает весь стор, и любое изменение вызовет перерисовку.

Варианты ответа

  1. Без селектора хук вообще не работает и возвращает undefined
  2. С селектором перерисовка только при изменении count, без него при любом измененииправильный ответ
  3. Селектор дополнительно кеширует выбранное значение на диск между запусками
  4. Без селектора стор сбрасывается к начальному состоянию при каждом рендере компонента

Разбор

Zustand сравнивает результат селектора с предыдущим (по Object.is) и перерисовывает только при отличии. useCart() без аргумента возвращает весь стор, и любое изменение вызовет перерисовку. Если селектор возвращает новый объект или массив на каждый вызов, нужна поверхностная проверка (useShallow). Хранение на диск делает middleware persist.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.