我一般只是进入RxJs和Observables . 我 grab 了这个想法,即你通常可以通过利用“takeUntil()”创建“自包含”的Observable .
在一个在线课程中,我正在看老师说:“我没有在10年内取消订阅,因为我总是使用takeUntil()创建结束事件流” . 这是他的例子:
var getElementDrags = elmt => elmt
.mouseDowns.map(() => document.mouseMoves.takeUntil(document.mouseUps))
.concatAll();
这对于“内在的”Observable来说非常好 . 但是,关于“mousedown”的一个外部Observable从来没有真正取消订阅......
我们还需要取消订阅吗?当用户离开页面时取消订阅/处置仍然是一种好的做法吗?
1 回答
例如,你有 - 你没有订阅任何东西...... RxJS是懒惰的,只有当你订阅了生成的observable时它才会订阅
mouseDowns
,当然 - 当你取消订阅结果可观察时它会取消订阅下划线的可观察量 .但是,通常情况下 - 是的,在订阅某些内容时取消订阅是一个很好的做法...但是 - 在使用RxJS时,通常您不需要手动订阅,并且在您需要时 - 您可能需要在应用运行时进行订阅(所以不需要取消订阅) .
唯一的例外是 - 当你开发自己的运营商,或连接到外面的东西时......
例如,如果您有反应组件并使用生命周期飞行来订阅安装时的更新,并在卸载时取消订阅 .
这是我的库https://github.com/zxbodya/rx-react-container - 它将observable,subject和react组件组合成具有可渲染项的新observable ......
结果,您只有一个订阅来管理整个应用程序(
appSubscription
),并且无需取消订阅 - 因为它在应用程序运行时使用 .同样的事情,关于在导航时的路由和取消订阅 - 在简化的情况下,您将只有
flatMapLatest
超过可观察的当前位置,这将为每个位置返回可观察的(如上面的app$
)...并且再次您不需要手动订阅/取消订阅 -flatMapLatest
将在内部完成 .