例如你有 - 你没有订阅任何东西...... RxJS 是懒惰的,它mouseDowns
只会在你订阅结果 observable 时订阅,当然 - 当你取消订阅结果 observable 时,它会取消订阅下划线的 observables。
但是,通常 - 是的,当你订阅某些东西时取消订阅是一个好习惯......但是 - 在使用 RxJS 时,通常你不需要手动订阅,当你需要时 - 很可能你需要在应用程序运行时订阅(所以无需取消订阅)。
唯一的例外是 - 当您正在开发自己的运营商,或连接到外部的东西时......
例如,如果您有反应组件并使用生命周期飞节来订阅挂载更新,并在卸载时取消订阅。
这是我为此目的的库https://github.com/zxbodya/rx-react-container - 它将可观察对象、主题和反应组件组合成带有可渲染项目的新可观察对象...
const app$ = createContainer(
App, // react component
{totalCount$}, // observables with data
{plusOne$, minusOne$} // observers for user actions
);
const appElement = document.getElementById('app');
const appSubscription = app$.forEach(renderApp=>render(renderApp(), appElement));
结果,您只有一个订阅可以管理整个应用程序(appSubscription
),并且无需取消订阅 - 因为它是在应用程序运行时使用的。
同样的事情,关于导航时的路由和取消订阅 - 在简化的情况下,您将刚刚flatMapLatest
在当前位置观察到,这将为每个位置返回可观察的(app$
如上)......而且您不需要手动订阅/取消订阅 -flatMapLatest
将在内部做。