如何停止/结束/拆解 Redux 传奇?

epi*_*ghs 5 redux-saga

我的应用程序有两个部分。它们各自都有自己的 saga 中间件,但两者永远不会同时实例化。总是一个或另一个。例如,一个处理登录的传奇和另一个处理主页的传奇。

我想知道在应用程序的两个部分之间导航时应该如何拆除 redux 传奇。我应该让它被垃圾收集吗?但是,如果仍有队列中的操作怎么办?这些操作仍然需要从缓冲区中清除。

Viv*_*edi 2

您可以在位置更改时取消观察者。所以你的观察者的代码将是这样的:

import { takeLatest, take, cancel } from 'redux-saga/effects';
import { LOCATION_CHANGE } from 'react-router-redux';

function* watchTheRequest() {
    const watcher = yield takeLatest('SOME_TYPE', callMySaga);
    yield take(LOCATION_CHANGE);
    yield cancel(watcher);
}
Run Code Online (Sandbox Code Playgroud)

因此,当您从一个部分移动到另一部分时,观察者将被取消。当您移动到该路线时,您可以重新注入观察者。