首页 > 解决方案 > 我是否需要释放通过 fromEvent 运算符绑定的事件处理程序?

问题描述

fromEvent(document, 'visibilitychange').subscribe(() => doSomething());

我想使用fromEvent运算符将​​事件绑定到文档,我想知道是否需要takeUntil在销毁阶段使用或取消订阅处理程序来删除/取消绑定处理程序。我已经了解到,当绑定的元素从 DOM 中删除时,事件处理程序会被释放,但在这种情况下,由于我将处理程序绑定到document,我觉得必须自己释放它,但我不确定. 任何见解将不胜感激!

标签: rxjs

解决方案


据我所知,当从文档树中删除 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);
    }

推荐阅读