【发布时间】:2022-01-20 10:29:28
【问题描述】:
目前,我正在开发一个可以编排多个 Web 组件的简单应用程序。其中一个组件包含一个 setInterval 函数。即使组件本身不再存在于 dom 中,该函数也会继续运行。谁能给我解释一下为什么会这样?
这是一个简单的复制:
const selectorEl = document.getElementsByTagName('body')[0];
selectorEl.innerHTML = '<my-component></my-component>'; // Append custom component to body
class WebComponent extends HTMLElement {
constructor() {
super();
this.innerHTML = '<span>This should not be visible since I am removed instantly!</span>';
setInterval(() => console.log('I am still running...'), 2000);
}
}
window.customElements.define('my-component', WebComponent);
selectorEl.innerHTML = ''; // Remove element from the dom directly
【问题讨论】:
-
setInterval将一直运行,直到您调用clearInterval,它与 DOM 无关。 -
“即使组件本身不再存在于 dom 中,该功能也会继续运行。有人可以向我解释为什么会这样吗?” - 因为有这两件事之间绝对没有关系......?!?从现在开始,您指示浏览器每隔一段时间执行一个函数。 DOM 与这...有什么关系?
-
谢谢,基思。你知道如果它们没有清理这个逻辑,是否可以强制停止 web 组件内的所有运行间隔?
-
您可能希望使用生命周期回调,developer.mozilla.org/en-US/docs/Web/Web_Components/…
标签: javascript typescript setinterval web-component