我的根组件可以呈现如下内容:
<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.messages
(props
也可以)。
情节扭曲:我不能将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
应该在这里工作?
答案 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>