> Что такое React Context и как работает хук useContext (React)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: ООО Премиум ИТ Солюшен, Софт Медиа Групп, Exness, Сфера
Стек: React
> Пример ответа
Короткий ответ
React Context - это механизм для передачи данных через дерево компонентов без необходимости прокидывать props через каждый уровень вручную. Хук useContext позволяет функциональному компоненту подписаться на значение ближайшего Context.Provider и перерендериваться при его изменении. Это удобно для глобальных данных вроде темы, локали или аутентификации.
Подробное объяснение
React Context решает проблему prop drilling - передачи props через множество промежуточных компонентов, которые сами не используют эти данные. Он состоит из двух частей: Provider (поставщик) и Consumer (потребитель). Provider оборачивает дерево компонентов и передаёт значение всем дочерним элементам.
Хук useContext - это современный способ подписаться на контекст в функциональных компонентах. Он принимает объект контекста (созданный через React.createContext) и возвращает текущее значение. Когда значение в Provider меняется, все компоненты, использующие useContext, автоматически перерендериваются.
Важно понимать, что контекст не оптимизирован для частых обновлений - любое изменение значения вызывает перерендер всех потребителей. Для высокодинамичных данных лучше использовать state management библиотеки или комбинировать контекст с useMemo.
На практике
Контекст идеален для данных, которые редко меняются и нужны многим компонентам: тема оформления, язык интерфейса, данные текущего пользователя. Не стоит помещать в контекст часто обновляемые данные (например, позицию мыши или ввод текста), так как это приведёт к избыточным перерендерам.
При работе с контекстом важно правильно структурировать Provider - обычно его размещают на верхнем уровне приложения. Для разных типов данных создают отдельные контексты, чтобы избежать лишних перерендеров.
Пример кода
JSXimport React, { createContext, useContext, useState } from 'react';// Создаём контекстconst ThemeContext = createContext('light');// Компонент-потребительfunction ThemedButton() {const theme = useContext(ThemeContext);return (<button style={{background: theme === 'dark' ? '#333' : '#fff',color: theme === 'dark' ? '#fff' : '#333'}}>Текущая тема: {theme}</button>);}// Provider на верхнем уровнеfunction App() {const [theme, setTheme] = useState('light');return (<ThemeContext.Provider value={theme}><ThemedButton /><button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>Переключить тему</button></ThemeContext.Provider>);}
Как отвечать на собеседовании
Начни с краткого определения контекста и его назначения. Затем объясни механизм работы: создание через createContext, Provider с value, и подписка через useContext. Упомяни, что useContext заменяет старый паттерн Context.Consumer с render props.
Подчеркни, что контекст решает проблему prop drilling, но не является заменой state management для сложных состояний. Приведи примеры подходящего использования: тема, локализация, аутентификация.
Будь готов обсудить ограничения: все потребители перерендериваются при любом изменении значения. Если спросят про оптимизацию, упомяни разделение контекстов и использование useMemo для value.
Что проверяет интервьюер
Интервьюер оценивает понимание базовых механизмов React: как работает поток данных, что такое prop drilling и как его избежать. Важно показать, что ты различаешь контекст и state management - контекст не предназначен для частых обновлений и не имеет встроенной оптимизации.
Также проверяется знание хуков и умение применять useContext в реальных сценариях. Хороший ответ включает понимание trade-off: контекст удобен, но может вызывать лишние перерендеры.
Типичные ошибки
- Путать контекст с глобальным состоянием - контекст это механизм передачи данных, а не хранилище
- Помещать в контекст часто меняющиеся данные без оптимизации
- Создавать один большой контекст для всего приложения вместо нескольких маленьких
- Забывать, что
useContextработает только внутри компонента, который находится под Provider - Использовать контекст для данных, которые можно передать через props без глубокой вложенности
> Похожие задачи по frontend
Что такое batching в React и зачем он нужен
Для чего используется React и почему его выбирают
Как правильно указывать зависимости в useEffect в React
Что такое reconciliation в React и как он работает
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью