Какие глобальные state менеджеры существуют для React
Что проверяют
Не список названий, а умение разложить состояние по видам и выбрать инструмент под задачу. Следом обычно спрашивают, что стоит в вашем текущем проекте и почему там не хватило бы Context.
Как отвечать
Сначала разделите состояние: серверные данные (кэш запросов), глобальное клиентское (тема, корзина, авторизация), локальное состояние компонента и состояние в URL. Большая часть того, что раньше клали в Redux, на деле серверный кэш, и для него есть TanStack Query, SWR или RTK Query.
Для клиентского глобального состояния:
- Redux Toolkit: современная форма Redux,
createSliceубирает шаблонный код, есть DevTools с историей действий. Оправдан в больших приложениях с жёсткими правилами изменения данных; - Zustand: хранилище на хуках без обязательного провайдера, подписка на срез через селектор, поэтому компонент перерисовывается только при изменении нужного поля;
- Jotai: атомарная модель, состояние собирается из мелких атомов и производных от них;
- MobX: реактивность через наблюдаемые объекты, компонент в
observerподписывается ровно на то, что прочитал. Мутирующий стиль, меньше кода; - Effector: событийная модель со сторами и эффектами, популярен в русскоязычных командах;
- Valtio: прокси над обычным объектом, изменения пишутся как мутации.
Context API стоит особняком: это механизм передачи значения вниз по дереву, а не менеджер состояния. При смене value перерисовываются все потребители, поэтому он хорош для темы или локали и плох для частых обновлений. Внешние сторы подключаются к React через useSyncExternalStore, это защищает от рассинхрона (tearing) при конкурентном рендеринге.
Где спотыкаются
Называют Recoil современным выбором. Он больше не развивается, репозиторий заархивирован, в новый проект его не берут.
Кладут ответы API в глобальный стор и руками пишут загрузку, ошибки и инвалидацию. Это ровно то, что уже решают библиотеки серверного кэша.
Говорят «Redux устарел» или, наоборот, «без Redux большое приложение не построить». Сильнее ответ с условием: размер команды, нужна ли отладка по действиям, сколько глобального состояния осталось после выноса серверного кэша.