Управление Client State
Разница между “данными” и “состоянием”
В клиентском приложении важно различать:
Данные (data):
- как правило, приходят с сервера
- могут устаревать
- могут изменяться вне клиента
- клиент не является источником истины
Состояние (state):
- описывает поведение интерфейса и пользовательские сценарии
- полностью контролируется клиентом
- не устаревает само по себе
То, что технически и data, и state можно хранить в state-менеджерах, не означает, что так следует делать.
Нужно ли вообще глобальное состояние
MUST
По умолчанию используется стандартный поток данных React:
- локальное состояние компонентов (
useState,useReducer) - передача данных через
props - изменение состояния через callbacks
State manager нужен, если
- состояние используется в компонентах, не связанных напрямую иерархией
- “поднять состояние выше” приводит к разрастанию компонентов и смешиванию ответственности
- состояние относится к уровню приложения, а не конкретного UI-элемента
Если есть сомнения - глобальное состояние вводить не нужно.
Server State vs Client State
MUST
В приложении обязано быть чёткое разделение:
Server State
- данные из API, которые могут устаревать/меняться вне клиента
- управляется библиотекой Server State (например TanStack Query)
Client State
- синхронное состояние UI и пользовательских сценариев
- источник истины - клиент
- управляется Redux Toolkit или Zustand