В чем разница между стейт-менеджером и контекстом?
Объекты и прототипы
Стейт-менеджер — это полноценное решение для управления состоянием с оптимизацией и инструментами, а Context — механизм передачи данных через дерево против prop drilling.
Context API
Транспорт данных через дерево без прокидывания props:
<ThemeContext.Provider value={theme}>...</ThemeContext.Provider>
const theme = useContext(ThemeContext);- Хорош для редко меняющихся глобальных данных (тема, локаль, юзер).
- Сам не управляет состоянием (значение задаёт
useStateвыше). - Минус: при изменении значения все потребители перерисовываются.
Стейт-менеджер (Redux/Zustand/MobX)
Управление состоянием:
- Гранулярная оптимизация ре-рендеров (селекторы).
- Инструменты (DevTools, time-travel).
- Middleware (асинхронность, логи).
- Предсказуемые изменения.
const count = useSelector((s) => s.count); // подписка только на countРазличия
- Назначение: Context — транспорт; менеджер — управление.
- Оптимизация: Context перерисовывает всех потребителей; менеджеры — гранулярно.
- Инструменты: у менеджеров — DevTools/middleware; у Context — нет.
Как выбирать
- Редко меняющиеся сквозные данные → Context.
- Сложное, часто меняющееся состояние → стейт-менеджер.
Коротко для собеседования
Context — транспорт данных против prop drilling (тема, локаль), но перерисовывает всех потребителей и сам не управляет состоянием. Стейт-менеджер — управление сложным состоянием с гранулярной оптимизацией, DevTools и middleware. Для частого/сложного состояния — менеджер, для сквозных редких данных — Context.