使用 Redux 更改根组件的状态/属性?

Wor*_*sor 1 state reactjs redux

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

<Provider store={store}>
  <IntlProvider locale="en" messages={this.state.messages}>
    <Router>
      <App>
        // routes
      </App>
    </Router>
  </IntlProvider>
</Provider>
Run Code Online (Sandbox Code Playgroud)

this.state.messages从后端动态获取(异步、Redux 操作 + 减速器)作为对象。我将其存储在 Redux 存储中。我如何将 Redux 存储传递messagesthis.state.messagesprops也可以)。

情节扭曲:我不能对connect这个组件使用react-redux,因为它是根组件并且不在其中<Provider>(它引入了它),所以,这样做:

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

export default connect(mapStateToProps)(RootComponent);
Run Code Online (Sandbox Code Playgroud)

结束于:

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)".
Run Code Online (Sandbox Code Playgroud)

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

Ori*_*ori 5

您可以创建一个连接的反应组件来包装 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);
Run Code Online (Sandbox Code Playgroud)

用途:

<Provider store={store}>
  <ConnectedIntlProvider locale="en">
    <Router>
      <App>
        // routes
      </App>
    </Router>
  </ConnectedIntlProvider>
</Provider>
Run Code Online (Sandbox Code Playgroud)