Проверяет понимание механизма передачи метаданных через context в React и его применения для избежания prop drilling.
В React данные обычно передаются сверху вниз через пропсы. Когда приложение растёт, возникает ситуация, когда глубоко вложенному компоненту нужны данные, которые находятся в корне. Пробрасывать их через каждый промежуточный компонент неудобно и загромождает код — это называется prop drilling. Context решает эту проблему, позволяя объявить данные один раз и сделать их доступными для любого компонента в поддереве.
Context состоит из трёх частей: createContext создаёт объект контекста, Provider оборачивает дерево и передаёт значение, а useContext (или Consumer) позволяет компонентам читать это значение. Когда значение в Provider меняется, все потребители автоматически перерисовываются.
const ThemeContext = React.createContext('light');
function App() {
return (
<ThemeContext.Provider value="dark">
<Toolbar />
</ThemeContext.Provider>
);
}
function Toolbar() {
return <Button />;
}
function Button() {
const theme = React.useContext(ThemeContext);
return <button className={theme}>Кнопка</button>;
}Здесь Button получает тему напрямую, минуя Toolbar. Это упрощает поддержку и делает код чище.
Context идеален для глобальных данных, которые редко меняются: тема оформления, язык интерфейса, данные аутентификации, настройки пользователя. Для часто меняющихся данных (например, состояние формы) лучше использовать локальный state или Redux, так как обновление Context вызывает перерисовку всех потребителей, что может быть дорого.
Context — мощный инструмент для передачи метаданных через дерево компонентов без пропсов. Применяйте его для глобальных настроек и данных, которые нужны многим компонентам, но избегайте для высокочастотных обновлений, чтобы не снижать производительность.