9

当某些观察到的元素从 DOM 中删除时,我应该调用.unobserve该元素以防止内存泄漏,还是“自动未观察到”?

const ro = new ResizeObserver((entries) => { console.log(entries); });
const el = document.getElementById('foo');
ro.observe(el);
// ... some time later
el.remove();
ro.unobserve(el); // <-- is this needed, or does it happen automatically behind the scenes?

为什么我要问:我正在实现一个观察许多孩子的 React 组件,并正确清理未安装组件的观察者将涉及非平凡的代码,如果它实际上是不需要的,我想避免它。

4

1 回答 1

5

根据csswg-drafts存储库中的问题,如果您从 DOM 中删除该元素并从 JS 中删除任何引用,Chrome 会自动取消观察该元素。

let el = document.querySelector("#id");
let ro = new ResizeObserver();
ro.observe(el);
setTimeout(_ => {
  el.remove();
  el = null;
}

如果没有对它的 JS 引用,当前的 Chrome 代码会隐式地不观察元素。这没有被规范捕获。

但问题仍然悬而未决...

于 2021-06-05T22:52:39.127 回答