Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: external, state

Как заставить React-компонент реагировать на изменения объекта, находящегося вне React?

Вопрос проверяет понимание границ React и способов интеграции внешнего состояния с React-рендерингом.

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

React не отслеживает изменения объектов вне своего state и props, поэтому напрямую на них не реагирует. Чтобы компонент обновлялся, нужно явно уведомлять React об изменениях: через подписку, обновление локального state или использование специальных хуков. На практике для этого применяют useSyncExternalStore, собственную систему подписок или state-менеджеры. Главное — при изменении внешнего объекта инициировать ререндер React.

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

React реагирует только на изменения, которые проходят через его механизм обновлений.

Почему React не видит внешний объект

Перед тем как говорить о решении, важно понять причину:

  1. React отслеживает только state и props.

  2. Мутации обычных JS-объектов не вызывают ререндер.

  3. Внешний объект может меняться без ведома React.

Основные подходы

Перед использованием подхода нужно выбрать стратегию синхронизации.

1. Подписка + локальный state

  1. Внешний объект уведомляет о своих изменениях.

  2. В компоненте вызывается setState, чтобы инициировать ререндер.

useEffect(() => {
  const unsubscribe = externalStore.subscribe(() => {
    setTick((t) => t + 1); // форсируем ререндер
  });

  return unsubscribe;
}, []);

2. useSyncExternalStore

  1. React предоставляет официальный API для внешних сторов.

  2. Он корректно работает с concurrent rendering и strict mode.

  3. Компонент автоматически обновляется при изменениях стора.

3. State-менеджеры

  1. Redux, MobX, Zustand инкапсулируют подписки внутри себя.

  2. Компоненту не нужно вручную управлять обновлениями.

Вывод

Чтобы React-компонент реагировал на изменения внешнего объекта, нужно явно связать эти изменения с механизмом рендера React, чаще всего через подписки или useSyncExternalStore.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • React

    React

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

#external

#state

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