Как уже говорит другой ответ, этого можно достичь, используя тот же магазин в провайдере Redux.Поскольку Redux не привязан к иерархии компонентов React, подключенные компоненты не обязательно должны иметь общего родителя:
ReactDOM.render(
<Provider store={store}><Header /></Provider>,
document.getElementById('header')
);
ReactDOM.render(
<Provider store={store}><App /></Provider>,
document.getElementById('root')
);
ReactDOM.render(
<Provider store={store}><Footer /></Provider>,
document.getElementById('footer')
);
Еще один параметр, который не относится к Redux, но также может использоваться с любым приложением React.который имеет несколько корневых компонентов, должен использовать порталы для этих компонентов, как показано в this answer :
const Page = props => (
<Provider store={store}>
{ReactDOM.createPortal(<Header/>, document.getElementById('header'))}
{ReactDOM.createPortal(<App/>, document.getElementById('root'))}
{ReactDOM.createPortal(<Footer/>, document.getElementById('footer'))}
</Provider>
);
ReactDOM.render(<Page/>, document.getElementById('page'));
, где <div id="page"></div>
- это элемент-заполнитель, который существует в теле HTML для монтирования приложения.и не обязательно должен быть родительским для элементов заголовка и т. д.
Этот параметр также можно использовать с контекстным API React Provider
или компонентом страницы state
.