在页面视图之间导航时如何取消所有正在运行的传奇

2024-04-10

当用户决定导航到应用程序内的另一个“页面”时,我正在尝试找到一种简单易用的方法来取消“页面”内所有正在运行的传奇...我们不使用路由,而是使用每个“页面”是一个更大的主机应用程序中自己的小部件,负责在用户导航时创建和加载每个页面...

目前,我们正在使用 redux-saga,并在创建和加载页面小部件时具有如下设置逻辑(为简洁起见,进行了简化)...

// page-sagas
export function* rootSaga() {
  const allSagas = [
    // ... all sagas used by page (example) ...
    // function* watchFoo() {
    //   yield takeEvery(FooAction, foo);
    // }
  ];
  yield all(allSagas.map((saga) => call(saga)));
}

// page-widget
onLoad = () => {
  const sagaMiddleware = createSagaMiddleware();
  const store = createStore(reducer, initState, applyMiddlware(sagaMiddleware));
  sagaMiddleware.run(rootSaga);
}

理想情况下,我宁愿避免向每个页面小部件中的每个单个传奇添加分叉逻辑,并且查看 Redux-Saga Task API,它表示您可以取消调用 middleware.run 返回的任务,但我想知道这是否会传播到当前正在进行的所有嵌套/子传奇,或者是否存在我应该注意的任何问题/陷阱:

Example:

// page-widget
onLoad = () => {
  ...
  this.task = sagaMiddlware.run(rootSaga);
}

destroy = () => {
  this.task.cancel();
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在页面视图之间导航时如何取消所有正在运行的传奇 的相关文章

随机推荐