Redux-Saga 连接多个生成器存储

Redux-Saga connect multiple generators to store

这可能是相当基础的,但我还没有找到解决方案。我正在使用 redux-saga 来处理我对 redux 的异步 API 调用。我需要将多个听众连接到商店。我像示例中那样尝试了 fork,第一个 fork 有效,但第二个没有。如何连接多个监听器?

export default function* mySaga() {
  yield [
    fork(yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends)), // works
    fork(yield* takeEvery("CREATE_USER_REQUESTED", createUser)),    // doesn't work
  ]
}

谢谢!

这是因为 fork 采用 函数,returns 承诺 生成器函数 根据此处的文档:

http://yelouafi.github.io/redux-saga/docs/api/index.html#forkfn-args

为了使您的情况有效,只需将 yield* 放入生成器函数中,它应该都能正常工作:

export default function* mySaga() {
  yield [
    fork(watchFetchFriends),
    fork(watchCreateUser)
  ]
}
function watchFetchFriends() {
   yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends);
}
function watchCreateUser() {
    yield* takeEvery("CREATE_USER_REQUESTED", createUser);
}

顺便说一句,我不确定您的第一个 yield* 是如何工作的。

遇到同样的问题,我找到了另一种方法

export default function* root(){
    yield [
        takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends),
        takeEvery("CREATE_USER_REQUESTED", createUser)
    ];
}

Redux Saga 在最新版本 (0.15.3) 中使用 all 功能将多个 sagas 合并为 Redux store 的一个根 saga。

import { takeEvery, all } from 'redux-saga/effects';

...

function *watchAll() {
  yield all([
    takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends),
    takeEvery("CREATE_USER_REQUESTED", createUser)
  ]);
}