Назначение
Zustand store <StoreName> хранит <тип состояния> для <контекст использования>.
Metadata
| Поле | Значение |
|---|---|
| App | <pin-admin/...> |
| Файл | src/shared/stores/<store-name>.ts или src/entities/<entity>/store.ts |
| Persistence | none / localStorage / sessionStorage |
| Persistence key | pin-pin.<store-name> |
| Hydration | sync / lazy |
| Статус | draft / approved / deprecated |
State Shape
| Поле | Тип | Default | Persistent | Описание |
|---|---|---|---|---|
<field> | <type> | <value> | да/нет | <смысл> |
Производные значения
| Selector | Тип | Источник | Описание |
|---|---|---|---|
<selectorName> | <type> | <какие поля state> | <вычисление> |
Actions
| Action | Сигнатура | Side effects | Описание |
|---|---|---|---|
<actionName> | (args) => void / Promise<void> | <какие поля меняет> | <алгоритм> |
Persistence Strategy
- Используется
persistmiddleware: да / нет. partialize: сохраняются только поля<list>. Чувствительные поля не сохраняются.- Версия store:
<version>. - Migrations при изменении версии:
<алгоритм>.
Hydration И Initial State
- Загрузка из storage при старте приложения: автоматическая / lazy.
- SSR-совместимость:
<да/нет; если да — как handle hydration mismatch>. - Initial state на сервере:
<default или из cookie>.
Использование
import { use<StoreName> } from "@/shared/stores/<store-name>";
function Component() {
const value = use<StoreName>((s) => s.<field>);
const action = use<StoreName>((s) => s.<actionName>);
// ...
}
Правила использования
- Selectors на уровне consumer:
useStore((s) => s.field). - Запрещено
useStore()без selector — провоцирует лишние ре-рендеры. - Запрещены side effects внутри actions, кроме записи в state. Запросы к API делаются снаружи и пишут результат в store.
Связь С TanStack Query
| Поле | TanStack Query вместо Zustand? | Обоснование |
|---|---|---|
<server data> | да | Cache, refetch, invalidation handled by Query |
<UI state> | нет (Zustand) | Не приходит с сервера |
Тестирование
| # | Сценарий | Проверка |
|---|---|---|
| 1 | Initial state | Корректные defaults |
| 2 | Action update | State меняется ожидаемо |
| 3 | Persistence | Запись в localStorage, восстановление |
| 4 | Selectors | Деривация корректна |
| 5 | Concurrent updates | Нет race conditions |
Обратные ссылки
Автоссылки: где используется этот документ.
- index.md (1): Шаблоны Документации
Связанные Документы
- frontend-state-management-rules.md
- frontend-fsd-and-atomic-rules.md
- Связанные query keys:
<entity>Keys. - Использующие компоненты:
<список>.