В чем разница Redux и React Context
Что проверяют
Понимаете ли вы, что это инструменты разного назначения, и знаете ли главную проблему контекста, лишние перерисовки.
Как отвечать
Контекст это механизм передачи значения вниз по дереву без проброса пропсов. Это транспорт, а не управление состоянием: он ничего не знает про то, как состояние меняется.
Redux это полноценное хранилище: единое дерево состояния, изменения через действия и чистые редьюсеры, селекторы, посредники, инструменты отладки с историей действий.
Главное практическое различие в перерисовках. Любое изменение значения контекста перерисовывает всех потребителей, независимо от того, какую часть значения они используют. Redux с useSelector подписывает компонент на конкретный кусочек, и остальные не трогаются. Отсюда и типичное лечение контекста: разбивать его на несколько по частоте изменения, отдельно данные и отдельно функции.
Как выбирать:
- контекст: то, что меняется редко и нужно многим. Тема, локаль, текущий пользователь, экземпляр сервиса;
- Redux (Toolkit): сложное общее состояние с большим числом источников изменений, где важна прослеживаемость;
- ни то ни другое: состояние сервера. Для него есть TanStack Query или RTK Query, которые дают кэш, повторные запросы и устаревание. Половина Redux-хранилищ в проектах это именно неудачно переписанный кэш запросов.
Где спотыкаются
Считают контекст заменой хранилища, а потом борются с перерисовками.
Кладут в контекст часто меняющееся значение и перерисовывают половину дерева.
Тянут Redux в маленькое приложение ради «правильности».
Не отделяют состояние сервера от клиентского и пишут вручную то, что уже умеет библиотека запросов.