今天主要说的reducers和effects之间的区别
一.reducer的数据流动
1.在model文件里面有个属性是reducers,他是一个对象,对象里面有个方法为add
2.add的任务是给组件的state里面添加一个user
3.当connect将组件和model连接以后就会将state和dispatch传递给组件
4.在组件里面我们直接可以用dispatch去指派action,例:
dispatch({
type:'add',
payload:{
usename:'张三'
}
})
此时dispatch里面的参数就是action,他的作用就是告诉浏览器去执行model里面的add方法
二.effects的数据流向
1.在model文件里面有2个属性,一个是reducers,一个是effects
2.effects他是一个对象,里面可以定义生成器,在生成器里面可以用yield call去请求异步数据
3.call请求的异步数据一般存放在services目录里面
4.例子:
effects: {
* getData({ payload }, { put, call }) {
const data = yield call(service.add)//add 是service里面的一个方法
yield put({
type: 'asyncAdd',
payload: data
})
}
}
5.用yield put()去调用action,指定reducers里面的方法,来更新state数据
6.当connect将state数据和组件连接以后,直接用传入的参数dispatch方法去调用effect里面的生成器即可
7.例子:
function add() {
dispatch({
type: 'products/getData',
})
}
总结:
1.在redux里面state的属性只能有reducers里面的方法改变
2.effects里面的生成器要想改变state里面的数据,必须通过reducers实现
3.组件和model之间的连接必须用connect方法
4.connect会传返回给组件model的state和dispatch作为参数。