Вопрос проверяет понимание границ React-деревьев и способов организации общего состояния между изолированными рендерами.
Два разных React-дерева не могут напрямую делиться state или context. Для синхронизации между ними используют внешний источник истины: external store, state-менеджер или браузерные механизмы. Оба дерева подписываются на изменения этого источника и обновляются при его изменении. Таким образом синхронизация происходит не через React, а через общий внешний слой.
Важно начать с ключевого ограничения: каждый React root полностью изолирован.
Context работает только внутри одного дерева.
props не могут “перепрыгивать” между root.
React не предоставляет глобального механизма синхронизации между деревьями.
Перед деталями зафиксируем схему:
Есть единый источник состояния.
Оба React-дерева читают данные из него.
Изменения в источнике уведомляют оба дерева.
Каждое дерево инициирует свой ререндер.
Самый универсальный и правильный вариант.
// общий стор
store.setState({ theme: "dark" });
// в каждом React-дереве
const theme = useSyncExternalStore(
store.subscribe,
store.getState
);
Плюсы:
Чёткая архитектура.
Контролируемые обновления.
Масштабируемость.
Redux, Zustand, MobX:
Один стор на приложение.
Несколько React root подписываются на него.
Синхронизация происходит автоматически.
Используются реже, но возможны:
localStorage + событие storage.
BroadcastChannel.
window.postMessage.
Пытаться пробрасывать данные напрямую между деревьями.
Дублировать состояние и “ручками” держать его в синхронизации.
Делать кросс-вызовы компонентов из разных root.
Синхронизация между React-деревьями возможна только через внешний источник состояния, который выступает единой точкой истины.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию