han*_*man 7 javascript reactjs react-redux react-context
我试图迁移react-redux v5.X.X到v6.0.0该站点,似乎没有任何文档。我正在使用以下版本:
"react": "^16.4.2"
"redux": "^4.0.0"
"react-redux": "^6.0.0"
官方更改日志说。
不再支持将存储作为道具传递给已连接的组件。相反,您可以向和都传递自定义context = {MyContext}属性。您也可以通过{context:MyContext}作为连接选项。链接在这里
这是我的根 index.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import { configureStore, history } from './Store';
import App from './App.hot';
import 'antd/dist/antd.min.css';
const reduxStore = configureStore();
ReactDOM.render(<App store={reduxStore} history={history} />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
这是我的app.jsx(根组件)
import React from 'react';
import PropTypes from 'prop-types';
import { Provider, connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { ConnectedRouter } from 'connected-react-router';
import Layout from './Layout';
class App extends React.Component {
static propTypes = {
store: PropTypes.object.isRequired,
history: PropTypes.object.isRequired,
};
render() {
const { store, profile, history } = this.props;
return (
<main className="app-wrapper">
// what i understand from change log is this part
// i need to pass context instead of store as props.
<Provider store={store}>
<ConnectedRouter history={history}>
<Layout user={profile} />
</ConnectedRouter>
</Provider>
</main>
);
}
}
function mapStateToProps(store) {
return {
...
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({
...
}, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(App);
Run Code Online (Sandbox Code Playgroud)
根据我创建的更改日志context并将其传递给提供者
const storeContext = React.createContext(reduxStore);
Run Code Online (Sandbox Code Playgroud)
这是我render更改后的功能
render() {
const { store, profile, history } = this.props;
return (
<main className="app-wrapper">
<Provider context={storeContext}>
<ConnectedRouter history={history}>
<Layout user={profile} />
</ConnectedRouter>
</Provider>
</main>
);
}
Run Code Online (Sandbox Code Playgroud)
通过store为props以provider给出以下错误
传递道具中的redux存储已被删除,并且不会执行任何操作。要将自定义Redux存储区用于特定组件,请使用React.createContext()创建自定义React上下文,并将上下文对象传递给React-Redux的Provider和特定组件,例如:。您还可以通过{context:MyContext}选项进行连接
并传递为context给出以下错误
在“ Connect(App)”的上下文中找不到“商店”。将根组件包装在中,或者将自定义React上下文提供程序传递给connect选项中的Connect(App),并将相应的React上下文使用者传递给Connect(App)。
我没有找到任何文档期望这个Redux历史文档在这里,它讲述了react-redux中的所有问题和解决方案,以及上下文api如何修复它。但我不确定如何在实际项目中实际实施它。
有人遇到过同样的问题吗?或者您能告诉我如何准确地执行此更改。
谢谢
han*_*man 11
我可以通过实际听错误消息说什么来解决问题。
我的代码有两个问题
store作为道具传递给我的<App />组件。这就是为什么出现第一条警告/错误消息的原因。传递道具中的redux存储已被删除,并且不会执行任何操作。要将自定义Redux存储区用于特定组件,请使用React.createContext()创建自定义React上下文,并将上下文对象传递给React-Redux的Provider和特定组件,例如:。您还可以通过{context:MyContext}选项进行连接
要解决此问题,请不要将整体redux store作为道具传递给任何组件
Provider来源react-redux不是根本原因。错误消息说在“ Connect(App)”的上下文中找不到“商店”。将根组件包装在Provider中,或者在连接选项中将自定义React上下文提供程序传递给Connect(App)并将相应的React上下文使用者传递给Connect(App)
所以我跟随句子中的第二句
将根组件包装在Provider中,或者传递自定义的React上下文
所以我把我的主要根源包装在提供商中。一切开始顺利。
ReactDOM.render(
<Provider store={reduxStore}>
<App />
</Provider>, document.getElementById('root'),
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5224 次 |
| 最近记录: |