Зачем нужен state manager, локальное и глобальное состояние

↑ 5.2 Состояние: Pinia, SSOT, Vue Query · → Следующая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

«Когда нужен стор?» — ждут разбора видов состояния, а не «всегда Pinia».

Объяснение

Виды состояния:

ВидПримерГде хранить
Локальное UIоткрыта ли модалка, значение поляref в компоненте
Общее для поддереваконтекст формы, темаprovide/inject, composable
Глобальное клиентскоетекущий пользователь, тема, корзина, настройкиPinia
Серверное (server state)списки, карточки с бэкендаTanStack Query (кэш, инвалидация)
URL-состояниефильтры, страница, вкладкаroute.query
Постоянноетокен, настройкиlocalStorage + стор
Формазначения, ошибки, dirtyбиблиотека форм (VeeValidate)

Симптомы, что нужен стор: prop drilling через 3+ уровня, одно состояние читают далёкие компоненты, нужно сохранять при смене маршрутов, требуется история/отладка (DevTools).

Принципы:

  • Держите состояние как можно ближе к месту использования; поднимайте по необходимости.
  • Один источник правды для каждого факта (SSOT).
  • Производные данные — computed/getters, а не дублирование.
  • Изменения — через явные действия (actions), не разбросанные мутации.
  • Не кладите в глобальный стор всё подряд и данные сервера (кэш — задача Query).
// Плохо: список заказов в сторе + ручная синхронизация с сервером
// Хорошо: заказы — useQuery, стор хранит выбранный фильтр и пользователя

Нюансы и подводные камни

  • Глобальный стор как «мусорка» усложняет понимание зависимостей.
  • Дублирование серверных данных в сторе приводит к рассинхрону.
  • Состояние в модульных переменных при SSR утекает между запросами.
  • Слишком гранулярные сторы порождают связанность.

Практика

  1. Классифицируйте состояние вашего приложения по таблице.
  2. Уберите из стора данные, которые стоит отдать Vue Query.
  3. Перенесите фильтры таблицы в query-параметры.

Вопросы с ответами

Связанные темы