【问题标题】:redux saga before action行动前的 redux 传奇
【发布时间】:2018-02-17 17:46:43
【问题描述】:

我有整个应用程序,具体取决于加载来自服务器的请求的配置数据,如何使用 redux saga 对每个操作创建阻塞“之前”操作,现在我的 globalSaga 看起来像这样。非常感谢您的帮助

function * rootSaga () {
  yield takeLatest(LOAD_ONBOARDING.REQUEST,loadOnboardingSaga)
  const res = yield put.resolve(loadOnboarding())
  yield console.log(res)

  yield all([
    fork(globalSaga),
    fork(spaceSaga),
    fork(profileSaga),
    fork(userSaga),
    fork(pagesSaga)
  ])
}

【问题讨论】:

    标签: redux redux-saga


    【解决方案1】:

    takeLatest 与分叉相同,自动取消每个后续分叉。查看this 以获得描述性示例。

    所以在你的情况下,因为loadOnboardingSaga 应该连续阻止下一个调用,最便宜的解决方案是将它全部放在loadOnboardinSaga 下,因为有这样的直接继承:

    function* initRestSaga() {
      yield all([
        fork(globalSaga),
        fork(spaceSaga),
        fork(profileSaga),
        fork(userSaga),
        fork(pagesSaga)
      ])
    }
    
    function* loadOnboardingSaga() {
      //...
      const res = yield put.resolve(loadOnboarding())
      yield console.log(res)
      yield call(initRestSaga)
    
    }
    
    function* rootSaga() {
      yield takeLatest(LOAD_ONBOARDING.REQUEST, loadOnboardingSaga)
    }

    否则,您必须手动分叉并取消 takeLatest 和最后一个分叉之间的每一个副作用。

    【讨论】:

    • 非常感谢,这是我没有看到的可能解决方案。最后决定在每个 saga 中链接阻塞操作。我对这种架构选择不太满意,但没有找到任何优雅的解决方案来解决这个问题,即如何同步链接包含异步请求的 saga。也许我应该用这个问题开始一个线程
    • 如果您觉得答案有用,您可以接受或投票。乐于助人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2019-12-04
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多