dva 笔记

  • put 等同 dispatch
  • dva 默认所有 effect 为 takeEvery, 可以使用下面的写法实现 takeLatest 等
const takeLatest = { type: 'takeLatest' };

effects: {
  addDelay: [
          function*({ payload }, { call, put }) {
            yield call(delay, 100);
            yield put({ type: 'add', payload });
          },
          takeLatest,
        ],
}
  • dva fetch catch 到的错误还是会侵入 effect 函数, 使用下面的函数阶段, 或者内部 throw ,在 effect 函数中 catch 处理
if (response instanceof Error) {
        return
      }

  • effect 函数中, yield 后一定要使用 effect 辅助函数(call,put,all,select等)
  • 同时执行多个 yield, 使用辅助函数 all
 yield all([
        put({
          type: 'getListSuccess',
          payload: response,
        }),
        put({
          type: 'tableInfo/setPaginationInfo',
          payload: {
            tableName: payload.tableName,
            paginationInfo: {
              current: response.data.pageNum,
              pageSize: response.data.pageSize,
              total: response.data.total,
            },
          },
        }),
      ])
  • 同时执行多个 effects 并阻塞, 使用put.resolve
 yield all([
          put.resolve({
            type: 'getTaxList',
            payload,
          }),
          put.resolve({
            type: 'getCaseList',
            payload,
          }),
        ])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容