redux-saga 项目已经存在了很长时间,但是这个库仍然有很多令人困惑的地方。其中之一是:如何启动你的 rootSaga。例如,在初学者教程中, rootSaga 是通过生成一个 saga 数组来启动的。像这样
export default function* rootSaga() {
yield [
helloSaga(),
watchIncrementAsync()
]
}
然而,在using saga helpers部分,rootSaga 由两个分叉的 saga 组成。像这样:
export default function* rootSaga() {
yield fork(watchFetchUsers)
yield fork(watchCreateUser)
}
在 redux-saga repo 的异步示例中使用了相同的启动 rootSaga 的方式。但是,如果您查看真实世界和购物卡示例,您会看到那里的 rootSagas 产生了一系列分叉的 saga。像这样:
export default function* root() {
yield [
fork(getAllProducts),
fork(watchGetProducts),
fork(watchCheckout)
]
}
此外,如果您阅读有关 redux-saga 问题的一些讨论,您会看到有些人建议使用 spawn 而不是 fork 用于 rootSaga 以防止您的应用程序在您的一个分叉 saga 因某些未处理的异常而被取消时完全崩溃。
那么,哪种方式是启动 rootSaga 的最正确方式呢?现有的有什么区别?