Vue的beforeDestroy生命周期中getElementById无法获取元素问题咨询
核心原因说明
beforeDestroy(Vue3中为beforeUnmount)生命周期的触发节点,是真实DOM已经从浏览器文档流中移除之后、Vue组件实例被销毁之前。document.getElementById是从当前页面的完整DOM树中检索元素,目标元素已经不在文档树内,自然返回null。- Vue的
$refs是组件实例内部维护的元素引用集合,只要组件实例还没被销毁,对应元素的引用就会被持续持有。哪怕元素已经脱离文档流,只要还没被垃圾回收机制清理,就可以通过$refs正常访问到元素对象。
二者核心区别
- 查询逻辑不同:
document.getElementById的查询范围是当前已挂载到浏览器的整个DOM树,只能检索到仍处于文档流中的元素;$refs仅在当前组件实例的引用映射中查找,和元素是否在文档流内无关。 - 生命周期绑定不同:
document.getElementById的返回结果完全跟随浏览器真实DOM树的状态变化;$refs的生命周期和所属组件实例完全同步,直到组件实例被完全销毁后才会被释放。
内容的提问来源于stack exchange,提问作者HJW
相关产品推荐
相关产品推荐

