跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • vue 热更新的时候,使用 document 获取到的 dom 元素里面包含的内容会消失,但是 ref 获取到的不会消失,这是为什么?为什么在 vue 中获取 dom 使用 ref,而不适用 document,有什么区别吗?
未分類
28 10 月 2020

vue 热更新的时候,使用 document 获取到的 dom 元素里面包含的内容会消失,但是 ref 获取到的不会消失,这是为什么?为什么在 vue 中获取 dom 使用 ref,而不适用 document,有什么区别吗?

vue 热更新的时候,使用 document 获取到的 dom 元素里面包含的内容会消失,但是 ref 获取到的不会消失,这是为什么?为什么在 vue 中获取 dom 使用 ref,而不适用 document,有什么区别吗?

資深大佬 : Pokemon123 6

vue 中的 dom 都是虚拟 DOM 渲染的,在没有渲染完毕之前 document 是获取不到的
大佬有話說 (10)

  • 資深大佬 : tanranran

    ref 到的 DOM,应该是内存里面的虚拟 DOM
    document 则是实打实的 DOM,渲染的时候被替换成 <!—-> 了

  • 資深大佬 : ragnaroks

    @ragnaroks 也就是说在没有渲染完毕之前,真实的 dom 里面的内容全是<!—->,所以我获取到的 dom 里面的内容是空的?

  • 主 資深大佬 : Pokemon123

    setTimeout 解决一切疑难杂症

  • 資深大佬 : xiangyuecn

    @xiangyuecn 可以再说的详细一些吗☺?

  • 主 資深大佬 : Pokemon123

    你看下 vue 的 nexttick 就了解了,有提到 dom

  • 資深大佬 : ragnaroks

    @ragnaroks 好的,谢谢❀

  • 主 資深大佬 : Pokemon123

    可别听上的 setTimeout,是有多大的❤️才会用这个蠢办法

  • 資深大佬 : hongch

    ref 里存的应该是 vue 自己的一个对象,有自己的唯一 key 值与实体 dom 做对应,在 vue 更新节点后更新两者之间的联系。setTimeout 的方法是,利用 marco queue 运行比 .nextTick 和 promise 优先级慢的特点,企图在 vue 更新 dom 节点后在去用 document 获取,不是拿不到,html 上的节点怎么可能拿不到。就是不太符合 vue 的思想

  • 資深大佬 : azcvcza

    在 vue 管理下的 dom 节点是会更新的,
    比如你用 var nodeNoRef = document.querySelecotr(‘.xx-node’) 拿到一个节点,
    vue 触发热更新(或者是 update)之后,上面的 nodeNoRef 就可能已经不在 document 中了,只是一个即将被回收的对象。
    解决方法:
    1. 每次使用 DOM 都用 Vue 的$ref 获取 ;
    2. 在必要时使用$nextTick 。 常见场景:data 更新后,需要立即获取 DOM,可能需要在$nextTick 中来获取 DOM 。

  • 資深大佬 : meepo3927

    @meepo3927 那我使用$ref 获取 dom 的时候,此时页面上还没有渲染真正的 dom 对吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具