Использовал ли ты Zustand
Что проверяют
Есть ли у вас реальный опыт или вы знаете библиотеку по README. Поэтому за «да» почти всегда идут уточнения: как компоненты подписываются на стор, чем Zustand был лучше контекста и Redux Toolkit в вашем проекте, где лежат данные с сервера.
Как отвечать
Начните с контекста: какой был проект, почему выбрали Zustand, что хранили в сторе. Потом покажите, что знаете устройство:
- создание:
createпринимает функцию сsetиgetи возвращает хук. В пятой версии остался только именованный импортimport { create } from 'zustand'; - селекторы: компонент подписывается на кусок состояния,
useStore((s) => s.users), и перерисовывается только при его изменении. Если селектор собирает объект из нескольких полей, нуженuseShallow, иначе в v5 новый объект на каждом вызове даёт бесконечный цикл рендеров; - обновления:
setсливает объект с состоянием только на верхнем уровне, вложенные поля копируются вручную или через middlewareimmer; - middleware:
persistдля localStorage,devtoolsдля Redux DevTools. Вне компонентов доступныuseStore.getState()иsetState(); - SSR: в Next.js стор, объявленный на уровне модуля, общий для всех запросов на сервере, поэтому его создают на запрос через
createStoreизzustand/vanillaи отдают через контекст.
Сильный ход: сказать, что Zustand вы берёте для клиентского состояния, а ответы API держите в TanStack Query с его кэшем и инвалидацией. Опыт подкрепите деталями: что лежало в сторе, что переписывали, какие проблемы ловили. Если с Zustand не работали, так и скажите, назовите, чем пользовались (Redux Toolkit, Context, Jotai), и объясните, чем модель Zustand отличается. Это лучше уверенного «да», которое рассыплется на втором вопросе.
Где спотыкаются
Достают всё состояние деструктуризацией const { users, addUser } = useStore(). Компонент подписан на весь стор и перерисовывается при любом изменении.
Складывают в Zustand серверные данные вместе с флагами загрузки и пишут свой кэш, повторяя TanStack Query хуже.
Мутируют состояние напрямую, state.users.push(user), вместо возврата нового массива. Ссылка не меняется, и подписчики изменения не видят.