Какое мнение о стейт-менеджерах?
Что проверяют
Есть ли у вас взвешенная позиция, а не любимая библиотека. Интервьюер хочет услышать, как вы делите состояние на виды и под какой вид берёте какой инструмент. Следом обычно спрашивают, почему бы не хранить всё в Redux или всё в контексте.
Как отвечать
Хороший ответ начинается с классификации, потому что разное состояние живёт по разным законам:
- локальное UI-состояние: открыт ли модал, текст в поле. Хватает
useStateилиuseReducer, выносить наружу незачем; - серверное состояние: данные с API, по сути кэш. Его лучше отдать TanStack Query, SWR или RTK Query: они сами решают загрузку, повторные запросы, инвалидацию и дедупликацию;
- общее клиентское состояние: корзина, настройки, текущий пользователь. Здесь и нужен стейт-менеджер: Redux Toolkit, Zustand, MobX, Jotai; во Vue это Pinia, в Angular сигналы или NgRx;
- состояние в URL: фильтры, сортировка, страница. Его место в адресной строке, иначе ссылку нельзя переслать;
- формы: React Hook Form или аналог, а не глобальный стор.
После такого деления глобального состояния обычно остаётся немного. Дальше выбор по задаче: Zustand даёт минимум кода, Redux Toolkit даёт строгий однонаправленный поток, createSlice, DevTools с историей действий и привычную структуру для большой команды, MobX удобен при сложных связанных моделях.
Отдельно скажите про Context: это способ доставить значение вниз по дереву, а не стейт-менеджер. При каждом изменении значения перерисовываются все его потребители, поэтому часто меняющиеся данные в контекст класть плохо.
Где спотыкаются
Складывают ответы API в Redux руками: экшены загрузки, флаги isLoading, ручная инвалидация. Это самописный серверный кэш, причём с багами.
Описывают Redux образца 2018 года: connect, ручные константы экшенов, switch в редьюсерах. Сейчас стандарт это Redux Toolkit и хуки useSelector и useDispatch.
Отвечают «стейт-менеджеры не нужны» или «без Redux нельзя». Сильнее позиция с условием: он нужен тогда, когда общее клиентское состояние действительно есть и его меняют из многих мест.