编写 rootSaga 的最佳方式
Best way to write a rootSaga
export function* watcherSaga() {
yield all([
takeEvery("POST_CONTACT_USER", handlePostContactUser),
takeEvery("POST_CAREERS_USER", handlePostCareersUser),
takeEvery("POST_TEAM", handlePostTeam),
takeEvery("CONTACT_SEND_TO_NODE", handleSendContactToNode),
takeEvery("CAREERS_SEND_TO_NODE", handleSendCareersToNode),
takeEvery("TEAM_SEND_TO_NODE", handleSendTeamToNode),
takeEvery("PROJECT_SEND_TO_NODE", handleSendProjectToNode),
takeEvery("POST_PROJECT", handlePostProject),
]);
};
这是我现在处理它的方式,但我觉得这可能不是最好的方法,有时东西不是 运行 而且我不认为我在其他部分破坏了代码项目的(我也没有收到任何错误)。
这是目前最好的方法吗?我还遗漏了其他东西,或者这段代码确实有问题吗?
这种方法很好,本身不会引起任何错误。唯一的“弱点”是,如果任何子 saga 抛出错误,它将杀死整个 saga 树。
您可以使用 spawn
效果来阻止这种情况,这将创建全新的传奇树,但是您仍然应该捕获并处理这些错误。
redux-saga 文档实际上有一个专门的页面,包括一些示例如何在失败时自动重启 saga 子树:
export function* watcherSaga() {
yield all([
takeEvery("POST_CONTACT_USER", handlePostContactUser),
takeEvery("POST_CAREERS_USER", handlePostCareersUser),
takeEvery("POST_TEAM", handlePostTeam),
takeEvery("CONTACT_SEND_TO_NODE", handleSendContactToNode),
takeEvery("CAREERS_SEND_TO_NODE", handleSendCareersToNode),
takeEvery("TEAM_SEND_TO_NODE", handleSendTeamToNode),
takeEvery("PROJECT_SEND_TO_NODE", handleSendProjectToNode),
takeEvery("POST_PROJECT", handlePostProject),
]);
};
这是我现在处理它的方式,但我觉得这可能不是最好的方法,有时东西不是 运行 而且我不认为我在其他部分破坏了代码项目的(我也没有收到任何错误)。
这是目前最好的方法吗?我还遗漏了其他东西,或者这段代码确实有问题吗?
这种方法很好,本身不会引起任何错误。唯一的“弱点”是,如果任何子 saga 抛出错误,它将杀死整个 saga 树。
您可以使用 spawn
效果来阻止这种情况,这将创建全新的传奇树,但是您仍然应该捕获并处理这些错误。
redux-saga 文档实际上有一个专门的页面,包括一些示例如何在失败时自动重启 saga 子树: