当前位置: 首页 > Web前端 > vue.js

petite-vue源码分析——ref工作原理

时间:2023-03-31 21:50:50 vue.js

ref内部工作原理很简单,其实就是将指令ref、:ref或v-bind:ref标识的元素实例存放在的$refs对象中当前作用域,那么我们可以通过this.$refs获取对应的元素实例。但是因为作用域继承有个小技巧,我们还是要注意从this.$refs中我们能得到的元素实例。让我告诉你一切吧!深入ref工作原理//file./src/directives/ref.tsexportconstref:Directive=({el,ctx:{scope:{$refs}},get,effect})=>{letprevRef:anyeffect(()=>{//获取指向元素的属性名constref=get()$refs[ref]=el//由于属性名可以动态生成(:ref="name"),如果新旧对应属性名称不同,则清理旧属性[prevRef]}}这个实现对吗?简洁呢?现在我们把注意力转到上下文对象(Context)的构造上//file./src/context.tsexportconstcreateScopedContext=(ctx:Context,data={})=>{onstparentScope=ctx.scopeconstmergedScope=Object.create(parentScope)Object.defineProperties(mergedScope,Object.getOwnPropertyDescriptors(data))//$refs构成$refs对象的原型链mergedScope.$refs=Object.create(parentScope.$refs)//......}$refs构成了$refs对象的原型链,那么我们可以引用元素实例createApp({App:{$template:`

`,Modal:{$template:`隐藏`,handleHide(){this.$refs.container.style.display='none'}}}}).mount('[v-scope]')总结下一篇《petite-vue源码剖析-优化手段template详解》开始解决petite-vue在线模板和在线渲染的问题,导致用户体验待优化如有疑问,敬请期待,尊重原创,转载请注明出处:https://www.cnblogs.com/fsjoh...盒子模型解读源码行一行一行,也详细分析了响应式系统中使用JS引擎的SMI优化依赖清理算法。绝对是Vue3源码入门前的绝佳敲门砖。喜欢的话记得转发和欣赏哦!