关于 dva 2 的一个使用的问题(effects 调用)

发布于 2022-09-06 15:45:21 字数 1127 浏览 9 评论 0

我想问一个有关 dva2 的一个问题:

这里以官方提供的user-dashboard的代码为例( https://github.com/dvajs/dva/... )

其effects:

    *create({ payload: values }, { call, put }) {
      yield call(usersService.create, values);
      yield put({ type: 'reload' });
    },
    *reload(action, { put, select }) {
      console.log('The reload is called...')
      const page = yield select(state => state.users.page);
      yield put({ type: 'fetch', payload: { page } });
    },

这里 create 函数会触发一个 { type: 'reload' } 这样的 action,经过尝试会触发下面的 reload 同名函数

但这个是如何导致 下面的 reload 函数执行的呢?

看到源码使用的 put 函数:

function put(action) {
    const { type } = action;
    assertAction(type, 'sagaEffects.put');
    return sagaEffects.put({ ...action, type: prefixType(type, model) });
}

应该主要也是 redux-saga 提供的,根据我的理解这里派发的 action 应该和其他的 effects 没有直接的调用关系(虽然dva增加了middleware使其返回Promise),比较困惑下面的 reload 是在哪里进行触发的?这个处理流程是如何的?

希望了解的同学能够指点一二,非常感谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

被你宠の有点坏 2022-09-13 15:45:21

感觉这就是 saga 本身的一种功能,我们使用 saga 的 takeEvery(key, sagaWithOnEffect); 对在业务组件中 dispatch 的 action 进行监听,实际上和监听这里的 action 是一样的

梦罢 2022-09-13 15:45:21

想了解更多,请学习react-redux

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文