数据的改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过
dispatch
发起一个 action,如果是同步行为会直接通过Reducers
改变State
,如果是异步行为(副作用)会先触发Effects
然后流向Reducers
最终改变State
,所以在 dva 中,数据流向非常清晰简明,并且思路基本跟开源社区保持一致(也是来自于开源社区)。
global.js
// 管理状态
export default {
namespace: "global",
state: {
userInfo: {
email: null,
pwd: null,
key: null,
},
},
// 更新state状态
/*
* effects:Action 处理器,处理异步动作,基于 Redux-saga 实现。
* Effect 指的是副作用。根据函数式编程,计算以外的操作都属于 Effect,典型的就是 I/O 操作、数据库读写。
* 异步函数不可以直接修改state状态,需要通过reducer函数来修改
*/
effects: {
*setUserInfo({ payload }, { put }) {
console.log("effects", payload);
yield put({ type: "set_userinfo", payload }