Этап 5 из 12 · ≈ 3 ч

Context

Основа с Junior

Передача данных вглубь дерева без проброса props — и почему это не менеджер состояния.

const ThemeContext = createContext("light");

function App() {
  const [theme, setTheme] = useState("dark");
  return <ThemeContext value={theme}><Page /></ThemeContext>;
}

function Button() {
  const theme = useContext(ThemeContext);
  return <button className={theme}>Ок</button>;
}

Что важно знать

  • Подходит для редко меняющихся данных, нужных многим: тема, язык, текущий пользователь.
  • При изменении значения перерисовываются все компоненты, читающие контекст. Объект-значение, созданный заново на каждом рендере, перерисует их всегда — оборачивать в useMemo или разделять контексты.
  • Часто проблему проброса props лучше решает композиция через children.
  • Для часто меняющегося общего состояния — Zustand, Redux Toolkit или библиотеки серверного состояния.

Критерии освоения

Junior ≈ 3 ч

  • Передаёт тему или пользователя через Context

Практика. Сделать переключатель темы на Context.

Middle ≈ 3 ч

  • Избегает лишних перерисовок — мемоизация значения, разделение контекстов
  • Объясняет, почему Context — не менеджер состояния

Практика. Найти и устранить лишние перерисовки из-за контекста с помощью React DevTools Profiler.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Что такое Context в React и когда его использовать?Junior

Context передаёт значение всему поддереву без протаскивания через props: createContext → <Ctx.Provider value={...}> наверху → useContext(Ctx) в любом вложенном компоненте. Подходит для редко меняющихся глобальных данных: тема, текущий пользователь, язык…

Полный разбор
Как избежать лишних перерисовок при использовании Context и почему Context — не менеджер состояния?Middle

Все потребители контекста перерисовываются, когда value меняется по ссылке. Частая ошибка — объект в value создаётся заново на каждом рендере провайдера: value={{user, setUser}} — тогда перерисовываются все даже без изменений. Лечение: мемоизировать value…

Полный разбор
Как управлять состоянием в React-приложении — Context, Redux, Zustand, серверное состояние?Junior

Сначала — локальное состояние и подъём к общему предку. Context — передать редко меняющиеся данные глубоко (тема, пользователь, язык) без прокидывания props. Глобальное хранилище (Redux Toolkit, Zustand) — сложное клиентское состояние, которое меняют многие…

Полный разбор
Как поделиться состоянием между соседними компонентами — что значит «поднять состояние»?Junior

Данные в React текут сверху вниз через props. Если двум соседям нужно одно состояние, его поднимают в ближайшего общего родителя: родитель хранит state, передаёт значение вниз через props и функцию изменения (колбэк) тем, кто должен его менять. Так у данных…

Полный разбор
Чем state отличается от props в React?Junior

props — входные данные от родителя, компонент их только читает. state — собственные данные компонента, меняются через setState и вызывают перерисовку. Данные текут сверху вниз; ребёнок сообщает об изменениях родителю через колбэки в props. Общее состояние…

Полный разбор

Документация

← Вся карта «React»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования