rxjs - 我是否需要释放通过 fromEvent 运算符绑定的事件处理程序?
问题描述
fromEvent(document, 'visibilitychange').subscribe(() => doSomething());
我想使用fromEvent
运算符将事件绑定到文档,我想知道是否需要takeUntil
在销毁阶段使用或取消订阅处理程序来删除/取消绑定处理程序。我已经了解到,当绑定的元素从 DOM 中删除时,事件处理程序会被释放,但在这种情况下,由于我将处理程序绑定到document
,我觉得必须自己释放它,但我不确定. 任何见解将不胜感激!
解决方案
据我所知,当从文档树中删除 Dom 节点时,关联的事件将被删除,但是由于该事件是使用 rxjs 绑定的fromEvent
,因此您仍然需要取消订阅以防止内存泄漏。
关于文档节点,通过查看 的源代码fromEvent
,它会在您取消订阅时为您调用 removeEventListener。当您不再需要它时,您将需要再次调用取消订阅。
function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
let unsubscribe;
if (isEventTarget(sourceObj)) {
const source = sourceObj;
sourceObj.addEventListener(eventName, handler, options);
unsubscribe = () => source.removeEventListener(eventName, handler, options);
}
推荐阅读
- git - 需要在 aws 代码提交中更改用户名
- flutter - 如何在颤振中测试状态?
- python - 是否可以创建一个按钮,其中命令也使用该按钮本身作为参数之一?
- linux - 如何为我的所有项目仅在本地保留最新的 git commit?
- xsd - 如何测试/验证 XSD 架构是否有效?
- swift - 无法使用打印调试 SwitfUI 视图
- java - Jetty 9.4.38 将受监控的路径(上下文)公开为自己的上下文
- symfony - 如何限制扩展同一实体的相关实体上的扩展属性的序列化?
- npm - 如何在不安装的情况下修改 package.json 依赖项
- swift - 我们如何在 textField 中仅使用“.isEnabled = false”作为索引?