升级到Redux v6

时间:2018-12-11 22:00:43

标签: reactjs redux

我正在尝试升级到Redux V6,但对于如何使用createContext函数及其必要性感到困惑。我知道我的商店创建成功,但是当我尝试运行我的应用程序时,我得到了

  

在“ Connect(ConfiguredApp)”的上下文中找不到“存储”。   将根组件包装在中,或传递自定义React   上下文提供者和相应的React上下文   使用者在连接选项中连接到Connect(ConfiguredApp)。

哪个告诉我,我的提供者没有正确地将商店传给connect来抢。我究竟做错了什么?谢谢!

import 'babel-polyfill';
import React from 'react';
import {render} from 'react-dom';
import {Provider} from 'react-redux';
import {ConnectedRouter} from 'connected-react-router';
import {history, store} from './store/store';
import Routes from './routes';

const customContext = React.createContext(null);

render(
  <Provider store={store} context={customContext}>
    <ConnectedRouter history={history} context={customContext}>
      <Routes />
    </ConnectedRouter>
  </Provider>, document.getElementById('app'),
);

1 个答案:

答案 0 :(得分:3)

几乎绝对不应创建和传递自定义上下文实例。如果出于某些特定原因,您想使用的上下文实例不是React-Redux已经在内部使用的默认实例,那么这只是 。 (这样做的一种假设原因是,如果您将一个商店用于整个应用程序组件树,但是有一个特定的子树需要从另一个商店接收数据。)

如果您确实想使用自己的自定义上下文实例,则需要将 same 上下文实例传递给 both {{ 1}}和应用中需要从该<Provider>接收数据的每个连接的组件。

通过查看<Provider>文档,他们确实声称在CRR版本6中,您可以将上下文实例传递给connected-react-router,但这在这里不必要。

更具体地说,如果查看错误消息,则表明问题出在<ConnectedRouter>中。因此,这是您自己连接的组件在说上下文不匹配。

最终,这里的答案是从Connect(ConfiguredApp)context删除<Provider>参数。您不需要它们。