我正在尝试在内部实现带有 redux-saga 的 React-boilerplate。所以我试图从服务器获取一些数据,然后重定向到另一个页面。问题是在重定向 saga 之前向服务器发出第二个请求。我想取消它有问题。这是我的代码的一部分:
export function* fetchData() {
...
console.log('fetched');
yield browserHistory.push('/another-page');
}
export function* fetchDataWatcher() {
while (yield take('FETCH_DATA')) {
yield call(fetchData);
}
}
export function* fetchDataRootSaga() {
const fetchWatcher = yield fork(fetchDataWatcher);
yield take(LOCATION_CHANGE);
yield cancel(fetchWatcher);
}
export default [
fetchDataRootSaga
]
所以在这个例子中我有两个控制台日志,第二个出现在重定向之前。我该如何解决?
还有一个问题。实际上,我在这个文件中有更多的功能。我应该为它们中的每一个创建“rootSaga”还是可以在 fetchDataRootSaga() 中全部取消它们?我的意思是如果我以这种方式取消 sagas 是否正常:
export function* fetchDataRootSaga() {
const watcherOne = yield fork(fetchDataOne);
const watcherTwo = yield fork(fetchDataTwo);
...
yield take(LOCATION_CHANGE);
yield cancel(watcherOne);
yield cancel(watcherTwo);
...
}
提前致谢!PS我不确定这段代码是否是最佳实践。它的灵感来自这个存储库