我目前正在测试Vue.js,并在我的项目中使用了一些 refs 。 我不确定每次在我的方法中调用ref,执行DOM Lookup,或者vue是否存储所有refs然后访问引用。
我无法通过文档或谷歌找到答案。
示例
myDiv = this.$refs.myDiv
我是否需要自己将ref存储在变量中,或者多次调用ref时是否没有性能影响?
答案 0 :(得分:4)
通过源代码,当启动vue实例时,它将属性$ref = { }
设置为空对象。见initLifecycle
function
通过检查虚拟节点在registerRef
函数中是否具有vm.$refs
属性(ref
来填充此vnode.data.ref
对象。
所以你自己不必这样做。
引用$refs.myRef
不会执行DOM查找。它将由虚拟dom补丁程序管理。
答案 1 :(得分:3)
does ref perform a DOM lookup each time?
简短的回答是否。
这是我粗略的理解:(如果我错了,请纠正我)
Vue使用虚拟DOM。在Vue中,真实DOM的虚拟表示是VNode。 Vue首先根据模板和脚本创建VNode。之后,Vue将虚拟DOM(包含所有VNode的树)与真实DOM进行比较。如果真实和虚拟DOM之间存在差异, Vue使用document.createElement
(或其他DOM创建函数)创建DOM元素。 document.createElement
返回指向实际DOM元素的指针。在将元素附加到显示之前,指针将保存到Vnode.elm
。每当创建/更新/销毁Vnode时,Vue都会检查ref属性并将this.$refs.refname
设置为Vnode.elm
}。
换句话说,从来没有DOM查找。 Vnode已经包含指向真实DOM元素的指针。当您使用ref时,Vue只会将现有的DOM指针分配给$refs
答案 2 :(得分:0)
引用已注册一次并缓存在$refs
对象中。你可以直接使用它们,没问题。