react-redux
工作流程react_redux
基本使用UI
组件:不能使用任何redux
的api
,只负责页面的呈现、交互等。redux
通信,将结果交给UI
组件react-redux
的connect
函数connect(mapStateToProps, mapDispatchToProps)(CountUI)
mapStateToProps: 映射状态:返回值是一个对象
mapDispatchToProps:映射操作状态的方法,返回值是一个对象
store
是靠props
靠进去的,而不是在容器组件中直接引入mapDispatchToProps
也可以是一个对象containers/Count.jsx
容器组件内App.js
components/Count.jsx
为UI
组件react_redux
优化UI
组件整合成一个文件store
,给<App/>
包裹一个<Provider store={ store }>
即可。react-redux
后也不用再自己监测redux
的状态的改变了,容器组件可以自动完成这个工作。mapDispatchToProps
也可以简写成一个对象redux
打交道要经过那几步?
UI
组件 — 不暴露connect
生成一个容器组件,并暴露,写法如下:connect(
state => { key: value } // 映射状态
{key: xxxAction} // 映射操作状态的方法
)(UI组件)
UI
组件中通过this.props.xxx
读取和操作状态index.js
containers/Count.jsx
容器组件内react_redux
数据共享版Person
组件,和Count
组件通过redux
共享数据Person
组件编写:reducer、action
,配置constant
常量Person
的reducer
和Count
的Reducer
要使用combineReducers
进行合并store
的是总的reducer
,最后注意在组件中取出状态的时候,记得“取到位”纯函数:
Date.now()
或者Math.random()
等不纯的方法redux
的reducer
函数必须是一个纯函数示例
1. 目录
2. store.js
3. constant.js
4. actions/person.js
5. reducers/person.js
6. App.js
7. Person/index.jsx
容器组件
react_redux
开发者工具的使用谷歌插件安装地址
yarn add redux-devtools-extension
store
中进行配置import {composeWithDevTools} from 'redux-devtools-extension'
const store = createStore(allReducer, composeWithDevTools(applyMiddleware(thunk)))
react_redux
最终版reducers
文件夹中,编写index.js
专门用于汇总并暴露所以的reducer
index.js