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