Context API
Тема дорожной карты · Frontend разработчик
React Context API — это встроенный механизм передачи данных через дерево компонентов без prop drilling, идеально подходящий для глобальных задач вроде состояния аутентификации, темы или настроек локали. Контекст создаётся с помощью React.createContext(defaultValue), предоставляется на верхнем уровне через <MyContext.Provider value={...}> и потребляется в любом дочернем компоненте с помощью хука useContext(MyContext). Хотя Context API элегантно решает проблему prop drilling для редко обновляемых данных, он перерисовывает всех потребителей при изменении значения контекста — поэтому для часто обновляемого состояния разработчики предпочитают специализированные библиотеки управления состоянием: Zustand, Redux Toolkit или MobX. В TypeScript React-проектах правильная типизация контекста — включая обобщённый параметр createContext и тип значения Provider — предотвращает скрытые ошибки выполнения и улучшает автодополнение редактора по всей кодовой базе.
Как это работает
Context API моделирует UI как дерево компонентов — JavaScript-функций, принимающих props и возвращающих JSX. State в useState-хуках; сайд-эффекты (fetch, subscribe) — в useEffect. На изменение state React ререндерит затронутый компонент, сравнивает virtual DOM, применяет минимальные DOM-обновления. Другие крупные фреймворки: Vue (template-based, реактивность встроена), Svelte (compile-time реактивность, меньше бандлы), Solid (signal-based, fine-grained), Angular (opinionated full framework). Выбирайте по знаниям команды.
Когда применять
React — самый большой хайринг + экосистема; Vue — "легче учить, есть шаблоны"; Svelte/Solid — самые маленькие бандлы + fine-grained реактивность; Angular — enterprise + full framework. Читайте официальную доку того, что выбрали; second-hand туториалы отстают от фичей. Не смешивайте фреймворки в одном приложении.
Типичные ошибки
Ловушки Context API: useEffect для того, что React делает сам (computed values, зеркалирование props); обновление state в render (infinite loop); огромные компоненты вместо декомпозиции; непонимание key prop в списках (порча при reorder); over-fetching на каждый render. Гайд React "You Might Not Need an Effect" убирает половину useEffect в реальных кодовых базах.