正如另一个答案已经暗示的那样,这可以通过在 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 应用程序一起使用的选项是为这些组件使用门户,如以下答案所示:
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 正文中以安装应用程序的占位符元素在哪里,并且不必是标题等元素的父元素。
此选项也可以与 React 上下文 APIProvider或页面组件一起使用state。