Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: React, Context API, Provider, Consumer, useContext, re-render

Как происходит подписка на изменения в Context API?

Проверяет понимание механизма подписки на обновления контекста в React Context API.

Короткий ответ

Подписка на изменения в Context API происходит через компонент-потребитель. Компонент, использующий useContext или Consumer, автоматически подписывается на контекст. При изменении значения, переданного в Provider, все подписанные компоненты перерендериваются. Это позволяет передавать данные глубоко по дереву без пропс-дриллинга.

Длинный ответ

Как работает подписка на изменения в Context API

В React Context API подписка на изменения реализуется автоматически при использовании хука useContext или компонента Consumer. Когда компонент вызывает useContext(MyContext), он регистрируется как подписчик на этот контекст. При изменении значения, переданного в Provider, React уведомляет всех подписанных компонентов и запускает их повторный рендер.

Пример кода

import React, { createContext, useContext, useState } from 'react';

const ThemeContext = createContext('light');

function App() {
  const [theme, setTheme] = useState('light');
  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      <Toolbar />
    </ThemeContext.Provider>
  );
}

function Toolbar() {
  const { theme, setTheme } = useContext(ThemeContext);
  return (
    <div>
      <p>Current theme: {theme}</p>
      <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
        Toggle
      </button>
    </div>
  );
}

Особенности подписки

  • Подписка происходит на уровне контекста, а не на отдельные поля значения. Если значение — объект, любое изменение объекта вызовет перерендер всех подписчиков.
  • Для оптимизации можно мемоизировать значение с помощью useMemo, чтобы избежать лишних рендеров.
  • Компоненты, не использующие контекст, не подписываются и не перерендериваются при его изменении.

Вывод

Context API удобен для передачи глобальных данных (тема, авторизация, язык) без пропс-дриллинга. Однако стоит применять его с осторожностью для часто изменяемых данных, так как это может вызвать избыточные рендеры. Для сложных состояний лучше использовать Redux или другие библиотеки управления состоянием.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • React

    React

Ключевые слова

#React

#Context API

#Provider

#Consumer

#useContext

#re-render

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию