升级到 Redux v6

IT技术 reactjs redux
2021-05-07 11:00:56

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

在“Connect(ConfiguredApp)”的上下文中找不到“store”。要么将根组件包装在 a 中,要么将自定义 React 上下文提供程序传递给连接选项中的 Connect(ConfiguredApp),并将相应的 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个回答

您几乎绝对不应该创建和传递自定义上下文实例。这是唯一的,如果,一些非常具体的原因,你要使用比阵营,终极版已经在内部使用默认以外的上下文实例。(这样做的一个假设原因是,如果您为整个应用程序组件树使用一个商店,但有一个特定的子树需要从不同的商店接收数据。)

如果你确实想用自己的自定义上下文实例,那么你就需要通过相同的情况下实例 <Provider>与每个连接的组件在应用程序需要接收来自数据<Provider>

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

更具体地说,如果您查看错误消息,就会发现问题出在Connect(ConfiguredApp). 因此,是您自己的连接组件表示存在上下文不匹配。

最终,这里的答案是context<Provider>和 中删除参数<ConnectedRouter>你不需要它们。