简单记录下dva中的effects与reducers
- reducers用来处理 同步操作 的函数,接收当前 state 和 action,返回新的 state如下代码:
changeState(state, { payload: { token, loginState } }) {
if (loginState === 200) {
return { ...state, isLogin: true, token };
}
return { ...state, isLogin: false, token };
},
通过结构赋值直接拿到dispatch传递的payload
dispatch({
type: 'changeState',
payload: {
token,
loginState
},
});
- effects处理 异步操作 的函数,接收 action 和 effects 对象,可以调用其他 effect 和 action
effects: {
*login({ payload: { name, pwd } }, { call, put }) {
const res: LoginResult = yield call(这边去执行一个调用接口的异步函数);
yield put({
type: 'changeState',
payload: {
token: res.token,
refreshToken: res.token,
loginState: res.state,
},
});
},
},
ps:补充一点关于 {call, put, select}用法
- call:用于调用异步逻辑,支持 promise
const res = yield call(request,payload);
- put:用于触发 action
- select:用于从 state 里获取数据
const data = yield select(state=>state.data);
//yield作用:保证当前语句执行完毕后,再执行下面的代码
未完待续