В чем разница между useState и state manager?
Хуки
Разница в зоне действия и назначении: useState — локальное состояние одного компонента; state manager — общее состояние приложения вне дерева компонентов.
useState: локальное состояние
const SearchBox = () => {
const [query, setQuery] = useState(''); // живёт только в этом компоненте
...
};- Принадлежит экземпляру компонента; исчезает при размонтировании.
- Передаётся вниз через props, вверх — через колбэки.
- Ноль инфраструктуры: встроено в React.
State manager (Redux, Zustand, MobX): глобальное состояние
const useCart = create((set) => ({
items: [],
add: (item) => set((s) => ({ items: [...s.items, item] })),
}));
// любой компонент, на любом уровне:
const items = useCart((s) => s.items);- Стор живёт вне дерева: доступен из любого компонента без props, переживает размонтирования.
- Точечные подписки селекторами — рендерится только заинтересованный компонент.
- Централизованная логика обновлений, девтулзы, middleware.
Как выбирать
- useState — всё локальное: поля форм, открытость модалок, табы, hover. Дефолт: начинать всегда с него.
- Подъём состояния / Context — состояние на несколько соседних компонентов.
- State manager — когда состояние нужно многим несвязанным частям приложения, часто меняется и имеет сложную логику: корзина, авторизация, realtime-данные.
- Серверные данные — отдельная категория: React Query, а не стор.
Признак перехода: одно и то же состояние «поднято» слишком высоко и пробрасывается через много уровней, либо логика обновлений размазана по компонентам.
Коротко для собеседования
useState — локальный стейт компонента (умирает с ним, передаётся через props); state manager — внешний стор с глобальным доступом, селекторами и централизованной логикой. Начинать с useState; стор подключать, когда состояние стало общим и сложным; серверные данные — в React Query.