vue 将组件渲染成html_Vue 源码之组件渲染

上篇讲了 new Vue 发生了哪些事情的大致流程,即如图所示,今天来分析下组件是如何渲染的基本流程。

5ee471debfe0d64ee824e66a630d8ea0.png
import Vue from 'vue'
import App from './App.vue'

var app = new Vue({
  el: '#app',
  // 这里的 h 是 createElement 方法
  render: h => h(App)
})

1be166f684e097b17d92de9000b630e8.png
new Vue 发生了什么?

首先会执行 vm 实例初始化过程,然后进入到 $mount,因为手写了 render 函数,所以跳过 compile 过程,否则会将 template 编译成 render 函数,接着直接执行 render 函数,实际上就是执行 createElement 方法,在这个方法中会对传入的第一个参数(tag),进行各种判断,我们这里传入的是一个组件对象,所以会进入到 createComponent 方法中,这个方法会生成一个组件 vnode,接着这个组件 vnode 会作为参数给到 patch 方法,其中核心的方法是 createElm 方法,这个方法会对不同的 vnode 有不同的处理方式,目的就是让 vnode 转变成 真实的 DOM;

当是组件 vnode 时,会进入到 createComponent 方法中(这是在 patch.js 中定义的方法,和之前同名的方法不是一个方法),这个方法的用途是返回组件实例,在这个过程中它会进行组件初始化过程,整个流程跟 vm 实例初始化会走同一个 init 函数,以上图中的流程又会从头走一遍,只是在 render 函数执行后生成的叫渲染 vnode,即 APP.vue 中的 template 的根节点的 vnode,又将渲染 vnode 带入到 patch 函数中,进入到 createElm 函数中,如果这个渲染 vnode 有子节点就会进入到 createChildren 方法中,这个方法实际上就是递归 createElm 方法,先生成子节点的真实 DOM,然后将其插入到页面中,然后再生成其父节点的真实 DOM,如此反复直到 vm 实例初始化完毕,所有节点都渲染完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值