如何使用React-Redux (连接React和Redux)
为了个人备忘录的目的。
在src/index.js中需要做的事情
从Redux中导入createStore方法。
创建一个用于创建STORE的方法。
在参数中指定reducer(如后面描述的)。
import { createStore } from 'redux';
2. 导入Provider组件
从 react-redux 中导入 Provider 组件,它是用于在 React 项目中使用 Redux 的中间件。然后将其放置在 React 项目中。
提供者组件是什么?
根据React Redux官方文档,只有嵌套在Provider组件内的范围中使用connect()连接的组件才能处理react-redux提供的功能。
通常情况下,除非它被嵌套在内部,否则无法使用连接组件。
Provider组件只接受名为store的props,字面意思上将通过这个props传递由createStore()创建的STORE。
import { Provider } from 'react-redux';
~~~~~中略~~~~~
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
3. 导入用于传递给STORE的REDUCER。
REDUCER应在其他文件中进行定义。
常见的做法是在src/reducers目录下创建目标特定的reducer文件,并进行切割。
在 src/index.js 中将遍布多个文件的 REDUCER 合并为一个,并传递给 STORE 的方法,请参考以下。
将 Redux 中多个 Reducer 进行合并的方法 – Qiita
import rootReducers from "./reducers"; // 指定がない場合はwebpackがデフォルトでindex.jsというファイルを指定してくれる
使用Redux时需要做的事情。
使用 React 和 Redux 的连接 connect()
– 登场人物们
– mapStateToProps : 将STORE所拥有的state传递给props并传递给子组件。
– mapDispatchToProps : 将调用DISPATCH的函数放入props并传递给子组件。
const mapStateToProps = (state) => { // Issueコンポーネント内で使用するstateを限定する役目
return {
// stateオブジェクトから指定できるのは、src/reducers/index.js でrootReducerにまとめたときのオブジェクトのkey名
// key名がコンポーネントで受け取るpropsの名前になる
// なので、子コンポーネントでは「issue」という名前で参照可能。
issue: state.issue.data,
};
}
/*
子コンポーネントからdispatchするときに、わざわざ `dispatch(actionCreator(追加したい要素))`しなくても、
この場合だと `addContents(追加したい要素)` でstoreにdispatchできるようになる。
*/
const mapDispatchToProps = dispatch => {
return {
addIssue: (payload) => {
dispatch(actions.addIssue(payload));
},
}
}
连接(connect())的语法
const ContainerInMiddle = connect(
mapStateToProps,
mapDispatchToProps
)(ChildComponent);
使用Redux连接的React组件的示例代码
import * as actions from '../actions';
import { connect } from 'react-redux';
import IssueContents from '../components/organisms/IssueContents';
const mapStateToProps = (state) => { // Issueコンポーネント内で使用するstateを限定する役目
return {
// stateオブジェクトから指定できるのは、src/reducers/index.js でrootReducerにまとめたときのオブジェクトのkey名
// key名がコンポーネントで受け取るpropsの名前になる
// なので、子コンポーネントでは「issue」という名前で参照可能。
issue: state.issue.data,
};
}
/*
子コンポーネントからdispatchするときに、わざわざ `dispatch(actionCreator(追加したい要素))`しなくても、
この場合だと `addContents(追加したい要素)` でstoreにdispatchできるようになる。
*/
const mapDispatchToProps = dispatch => {
return {
addIssue: (payload) => {
dispatch(actions.addIssue(payload));
},
}
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(IssueContents);
请引用以下内容:
▷关于Redux的connect方法
▷基础教程 | React Redux
▷在React和Redux中管理状态的方法|Playground发表!应用开发公司技术博客