Какие альтернативные state менеджеры используются кроме Redux
Что проверяют
Понимаете ли вы, что состояние бывает разным: серверный кэш, глобальный клиентский стейт, локальное состояние формы. Следом спрашивают, что бы вы взяли в новый проект и почему именно это.
Как отвечать
Начните с разделения. Большая часть того, что раньше клали в Redux, это данные с сервера, и для них есть отдельный класс инструментов:
- TanStack Query, SWR, RTK Query: кэш серверных данных, повторные запросы, инвалидация, фоновое обновление. После них глобального стора часто почти не остаётся;
- Context с
useStateилиuseReducer: встроено в React. Годится для редко меняющихся значений: тема, текущий пользователь, язык. Любое изменениеvalueперерисовывает всех потребителей, селекторов нет; - Zustand: стор на хуке без провайдера, подписка через селектор, поэтому компонент перерисовывается только при изменении своего среза. Небольшой API, есть middleware
persistиdevtools; - Jotai: атомарная модель, состояние собирается из мелких атомов и производных от них. Удобен, когда куски стейта сложно зависят друг от друга;
- MobX: observable-объекты и автоматическое отслеживание зависимостей, компоненты оборачиваются в
observer. Кода мало, но изменения менее явные, чем в редьюсерах; - XState: конечные автоматы и statecharts для сложных процессов вроде многошаговой формы или оплаты;
- Valtio, Effector, Nano Stores, сигналы: достаточно показать, что вы о них знаете.
Отдельно скажите, что сам Redux сегодня пишут через Redux Toolkit: createSlice и RTK Query сильно сократили шаблонный код, и претензия «в Redux слишком много бойлерплейта» относится к старому стилю.
Где спотыкаются
Называют Recoil новым перспективным решением. Его перестали развивать, репозиторий в архиве с начала 2025 года.
Предлагают Context как полную замену Redux для часто меняющегося состояния и не знают про лишние перерисовки всех потребителей. Лечится разбиением контекстов или переходом на стор с селекторами.
Сравнивают библиотеки по популярности, а не по модели данных. Сильный ответ связывает выбор с задачей: серверные данные отдельно, клиентский стейт отдельно, автоматы для сложных процессов.