Перейти к основному содержимому

Назначение

Zustand store <StoreName> хранит <тип состояния> для <контекст использования>.

Metadata

ПолеЗначение
App<pin-admin/...>
Файлsrc/shared/stores/<store-name>.ts или src/entities/<entity>/store.ts
Persistencenone / localStorage / sessionStorage
Persistence keypin-pin.<store-name>
Hydrationsync / lazy
Статусdraft / approved / deprecated

State Shape

ПолеТипDefaultPersistentОписание
<field><type><value>да/нет<смысл>

Производные значения

SelectorТипИсточникОписание
<selectorName><type><какие поля state><вычисление>

Actions

ActionСигнатураSide effectsОписание
<actionName>(args) => void / Promise<void><какие поля меняет><алгоритм>

Persistence Strategy

  • Используется persist middleware: да / нет.
  • 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)Не приходит с сервера

Тестирование

#СценарийПроверка
1Initial stateКорректные defaults
2Action updateState меняется ожидаемо
3PersistenceЗапись в localStorage, восстановление
4SelectorsДеривация корректна
5Concurrent updatesНет race conditions

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные Документы