写文章不容易,点个赞呗兄弟
专一 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工做原理,源码版助于了解内部详情,让咱们一块儿学习吧
研究基于 Vue版本 【2.5.17】
若是你以为排版难看,请点击 下面连接 或者 拉到 下面关注公众号也能够吧html
component 从模板上使用到挂载到页面上,到底经历了一个怎么样的流程??里面到底掺杂了什么神奇的东西,母猪为什么半夜惨叫,这一切的背后,到底是....dom
component 从模板上使用到挂载到页面上,到底经历了一个怎么样的流程??里面到底掺杂了什么神奇的东西,母猪为什么半夜惨叫,这一切的背后,到底是....函数
好吧,立刻进入主题,component 挂载流程学习
好了,既然说的是 component,那么其余的无关步骤天然是要略过的spa
总的提及来,component 建立流程,就两个步骤3d
一、建立 component 外壳VNode 二、挂载 component dom
咱们一步一步来讲code
“这里说的组件vnode,是外壳vnode,不懂下面会说”component
如今有一个页面A 使用是了 test 组件htm
而后页面被解析成了一个渲染函数
如今要开始执行页面A渲染函数,这个渲染函数执行获得 【模板对应的 VNode】
其中 _c 的做用就是,根据传入的参数,构造相应的 VNode
执行到 _c('test'),须要构建一个标签为 test 的 vnode,可是发现,诶?test 不是一个正常的 html 标签啊
因而送去非正常标签研究院进行研究 ,哈哈,就是去作一些特殊处理
作的是什么呢?
一、构建组件的构造函数,处理父组件给子组件绑定的数据,好比 props,事件,slot 等等
二、建立组件外壳VNode,就是下面这个
相信你们应该清楚什么是外壳节点了,细节能够跳到下文相关内容看
外壳节点,就是用来保存 父组件和子组件 进行PY交易重要场所
就是为了保存了上一步处理获得的 组件构造函数,props,事件,slot 等
来打印看下
只有 tag 判断属于组件以后,才会进行这一步。如今这一步就结束了,到下一步挂载
当页面A渲染函数执行完毕,获得了一棵模板对应的VNode 树
那么下一步就是 根据VNode 建立DOM,而后进行挂载了喂
此时!
Vue 须要递归遍历 页面的 VNode 树,进行生成对应的DOM
而后!
每遍历到一个标签都要判断一次,这个标签是不是组件啊巴拉巴拉的
直到碰到了 test 这个比,你不是组件吗,继续送去研究所研究
作了什么研究?
一、拿到 test 外壳节点保存的构造函数
二、new 构造函数() 执行,获得新建的组件实例,完成实例初始化
三、根据上一步生成的实例,调用挂载函数,解析组件内部模板,而后生成DOM,挂载到父页面A 中
解析内部模板,就是处理正常的标签挂载了(排除组件嵌套)
具体流程能够参考下文
好的,到此,component 构建的流程完美结束了
组件的挂载是和页面挂载过程息息相关的,就只有两个步骤
一、页面解析模板获得 VNode 时:建立组件构造函数 + 生成外壳节点保存 父子关联的数据
二、页面开始挂载 DOM 时:新建建组件实例,解析组件内部模板,生成DOM挂载到父页面