解锁Dva篇-effects 与 reducers

436 阅读1分钟

简单记录下dva中的effects与reducers

  1. 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
  },
});
  1. 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作用:保证当前语句执行完毕后,再执行下面的代码

未完待续