代码之家  ›  专栏  ›  技术社区  ›  Dylan

在redux的提供程序中包装多个react DOM组件

  •  1
  • Dylan  · 技术社区  · 7 年前

    index.js <Provider> 标记将其包装起来,以便它们都可以访问同一个商店,
    问题是,我该怎么做?

    ReactDOM.render(<Header />, document.getElementById('header'));
    ReactDOM.render(<App />, document.getElementById('root'));
    ReactDOM.render(<Footer />, document.getElementById('footer'));
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   Teodor Sandu    7 年前

    好吧,如果 store <Provider> 他们将使用相同的Redux商店。这个 Provider 商店 . 大概是这样的:

    const store = createStore(...); // or any valid Redux store declaration or import
    
    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'));
    
        2
  •  3
  •   Estus Flask    7 年前

    正如另一个答案已经表明的那样,这可以通过在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')
    );
    

    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正文中存在的用于装入应用程序的占位符元素,不必是标头等元素的父元素。

    Provider 或页面组件 state

        3
  •  0
  •   Don Brody Arshak Manukyan    7 年前

    root 并在React应用程序中处理其余部分,如下所示:

    在里面 index.js

    const store = createStore(...);
    ReactDOM.render(
      <Provider store={store}>
        <App />
      </Provider>, document.getElementById('root'));
    

    在里面 App.js :

    export default = () =>
      <Header />
      <Body />
      <Footer />
    

    create-react-app ):

    <body>
      <noscript>JavaScript must be enabled to run this application.</noscript>
      <div id="root"></div>
    </body>