同时调用observer.unobserve与observer.disconnect是否冗余?是否只需使用其一?
IntersectionObserver清理函数:unobserve与disconnect是否冗余?
先明确两个方法的实际作用:
observer.disconnect():直接终止当前IntersectionObserver实例的所有观察行为,它会自动停止监听所有已注册的目标元素,相当于一次性完成所有元素的unobserve操作。observer.unobserve(item):仅停止监听单个指定的目标元素。
回到你的代码:在清理函数里先循环调用unobserve,再调用disconnect属于冗余操作。因为disconnect本身就会取消所有元素的观察,前面的循环完全没必要保留。
你可以直接简化清理函数为:
return () => { observer.disconnect() }, []
当然,反过来如果只调用unobserve循环而不调用disconnect,虽然能停止观察所有元素,但Observer实例本身还会保留(可能占用不必要的资源),所以更推荐直接用disconnect来完成完整的清理,一步到位。
内容的提问来源于stack exchange,提问作者user19666029
相关产品推荐
相关产品推荐

