Какие плюсы и минусы контекста?
Объекты и прототипы
Плюсы Context (React): передача данных без prop drilling, простота для глобальных данных. Минусы: перерисовка всех потребителей при изменении, не для частого состояния, сложнее тестировать.
Плюсы
- Нет prop drilling — данные доступны любому потомку без прокидывания через уровни:
const theme = useContext(ThemeContext); // напрямую, без props-цепочки- Простота — встроен в React, не нужна библиотека.
- Хорош для сквозных данных — тема, локаль, авторизованный пользователь, настройки.
- Область действия — разные значения для разных поддеревьев.
Минусы
- Перерисовка всех потребителей — при изменении значения контекста все компоненты, использующие его, перерисовываются (нет гранулярной оптимизации). Для часто меняющихся данных неэффективно.
- Не для сложного состояния — нет middleware, DevTools, оптимизаций (в отличие от Redux/Zustand).
- Сложнее тестировать — компоненты завязаны на провайдер.
- «Provider hell» — много вложенных провайдеров.
- Неявность — зависимость от контекста не видна в интерфейсе компонента.
Как смягчить минусы
- Разделять контексты (часто меняющиеся отдельно).
- Мемоизировать значение (
useMemo). - Для сложного/частого состояния — стейт-менеджер.
Когда применять
- Редко меняющиеся глобальные данные → да.
- Часто меняющееся сложное состояние → стейт-менеджер.
Коротко для собеседования
Плюсы Context: нет prop drilling, простота (встроен), хорош для сквозных данных (тема, локаль, юзер). Минусы: при изменении значения перерисовываются все потребители (нет оптимизации — плохо для частого состояния), нет middleware/DevTools, «provider hell», сложнее тестировать. Смягчают разделением контекстов и мемоизацией; для сложного состояния — стейт-менеджер.