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)
]);
}
这可能是相当基础的,但我还没有找到解决方案。我正在使用 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)
]);
}