Какие стейт-менеджеры существуют и используются во frontend
Что проверяют
Не каталог библиотек, а понимание, какие виды состояния бывают и какой инструмент под какой вид. Следом почти всегда спрашивают, почему не хватает Context или где вы храните данные с сервера.
Как отвечать
Начните с разделения: локальное состояние компонента, глобальное клиентское (тема, корзина, авторизация), серверное (кеш ответов API) и состояние в URL. Потом инструменты:
useStateиuseReducer: локальное состояние, большинству компонентов больше ничего не нужно;- Context: способ доставить значение вниз по дереву, а не стейт-менеджер. При смене значения перерисовываются все потребители, поэтому он хорош для редко меняющихся данных;
- Redux Toolkit: современный Redux.
createSlice,configureStore, Immer под капотом, однонаправленный поток и Redux DevTools. Подходит большим командам, где важна предсказуемость; - Zustand: стор на хуках без провайдера, подписка через селекторы, минимум кода;
- Jotai: атомарная модель, состояние собирается из маленьких атомов, перерисовываются только их подписчики;
- MobX: реактивность через observable, компонент следит за тем, что прочитал. Удобен для сложной доменной модели;
- TanStack Query, SWR, RTK Query: серверное состояние. Кеширование, повторные запросы, инвалидация, фоновое обновление. Это отдельный слой, а не замена Redux;
- XState: конечные автоматы для сложных сценариев вроде многошаговых форм.
За пределами React назовите Pinia во Vue (официальная замена Vuex), NgRx и сигналы в Angular. В русскоязычных командах часто встречается Effector.
Где спотыкаются
Советуют Recoil как перспективный вариант. Meta перевела репозиторий в архив в начале 2025 года, в новых проектах его не берут, похожую атомарную модель даёт Jotai.
Складывают ответы API в Redux руками, со своими флагами загрузки и ошибок. Кеш, дедупликацию запросов и инвалидацию уже решают TanStack Query или RTK Query.
Ругают Redux за шаблонный код, имея в виду старый подход со switch и константами экшенов. Redux Toolkit давно стал официальным способом писать на Redux, и претензия устарела.