使用Redux更改根组件的状态/道具?

时间:2017-11-26 11:39:35

标签: reactjs redux state

我的根组件可以呈现如下内容:

<Provider store={store}>
  <IntlProvider locale="en" messages={this.state.messages}>
    <Router>
      <App>
        // routes
      </App>
    </Router>
  </IntlProvider>
</Provider>

我从后端动态地(异步,Redux动作+ reducer)获取this.state.messages作为对象。我将它存储在Redux商店中。如何将Redux商店messages传递给this.state.messagesprops也可以)。

情节扭曲:我不能将react-redux connect与此组件一起使用,因为它是根组件,它不在<Provider>内(它引入它),所以,这样做:

const mapStateToProps = state => {
  return {
    messages: state.messages
  }
}

export default connect(mapStateToProps)(RootComponent);

结束于:

Uncaught Error: Could not find "store" in either the context or props of "Connect(RootComponent)". Either wrap the root component in a <Provider>, or explicitly pass "store" as a prop to "Connect(RootComponent)".

有没有办法以不同的,理智的方式访问Redux商店?我正在考虑store.getState()但是它不接受任何参数,并且当我想要获得其中一个时,映射所有状态项似乎有点过分。或者我可能做错了什么,毕竟connect应该在这里工作?

1 个答案:

答案 0 :(得分:3)

您可以创建一个连接的反应组件来包装IntlProvider,并将消息传递给它。

示例代码(尚未测试):

const ConnectedIntlProvider = ({ children, ...props }) => ( // the props contain the messages and the locale
  <IntlProvider locale="en" { ...props }>
  { children }
  </IntlProvider>
);

const mapStateToProps = state => ({
  messages: state.messages
});

export default connect(mapStateToProps)(ConnectedIntlProvider);

用途:

<Provider store={store}>
  <ConnectedIntlProvider locale="en">
    <Router>
      <App>
        // routes
      </App>
    </Router>
  </ConnectedIntlProvider>
</Provider>