Hack Frontend Community

Что такое контекст и хук useContext в React

Контекст (Context) в React — это способ передавать данные между компонентами на любом уровне вложенности, минуя передачу пропсов (props) вручную через каждый уровень дерева.

Контекст удобен, когда определённые данные (например, текущий пользователь, язык, тема) нужны во многих компонентах одновременно.


Зачем нужен Context?

  • Избегает prop drilling — необходимости передавать данные через множество промежуточных компонентов.
  • Позволяет удобно работать с глобальными данными:
    • Авторизация
    • Тема оформления (light / dark)
    • Локализация
    • Настройки приложения

Пример использования Context API

Создание контекста

import { createContext } from "react";

const ThemeContext = createContext("light");

Оборачивание компонентов в Provider

<ThemeContext.Provider value="dark">
  <App />
</ThemeContext.Provider>

Чтение данных с помощью useContext

import { useContext } from "react";

function Header() {
  const theme = useContext(ThemeContext);
  return <h1 className={`header ${theme}`}>Привет!</h1>;
}

Теперь компонент Header знает, что тема — "dark", без пропсов!

useContext: как работает?

const value = useContext(ContextObject);
  • Позволяет получить текущее значение контекста
  • Работает только внутри компонента, обёрнутого в Context.Provider
  • Обновляется автоматически, когда значение в Provider меняется

Пример со сменой темы

const ThemeContext = createContext("light");

function ThemeSwitcher() {
  const theme = useContext(ThemeContext);
  return <button className={`btn-${theme}`}>Сменить тему</button>;
}

Когда не стоит использовать контекст

  • Для часто обновляемых значений (например, текущее значение инпута)
  • Когда можно передать данные напрямую через пропсы (контекст = "тяжёлая артиллерия")

Итог

  • Контекст нужен, чтобы удобно делиться данными между компонентами без лишней передачи пропсов.
  • Хук useContext позволяет легко получить доступ к значению контекста.
  • Подходит для темы, языка, настроек пользователя, глобального состояния.

Совет:

Используйте контекст для данных, которые нужны многим компонентам и редко меняются.