Vue2源码-整体流程浅析

本文基于Vue 2.6.14进行源码分析
为了增加可读性,会对源码进行删减、调整顺序、改变的操作,文中所有源码均可视作为伪代码

文章内容

  • 流程图展示Vue2初始化渲染流程
  • 源码(删减、调整顺序)分析无/有Component时的渲染流程
  • 用简单例子,进行整体流程的分析

整体流程图

流程图代码分析

_init():初始化逻辑

  1. 初始化生命周期
  2. 初始化event
  3. 初始化createElement等渲染方法
  4. 生命周期beforeCreate调用
  5. 初始化props、methods、data、computed、watch
  6. 生命周期created调用
  7. vm.$mount渲染到真实DOM上
function Vue (options) {
  this._init(options);
}

Vue.prototype._init = function (options) {
    const vm = this;
   
    // 合并配置
    vm.$options = mergeOptions(
        resolveConstructorOptions(vm.constructor),
        options || {},
        vm
    );
    initLifecycle(vm); // 初始化生命周期
    initEvents(vm); // 初始化event
    initRender(vm); // 初始化createElement等渲染方法
    callHook(vm, 'beforeCreate');
    initInjections(vm); // resolve injections before data/props
    initState(vm); // 初始化props、methods、data、computed、watch
    initProvide(vm); // resolve provide after data/props
    callHook(vm, 'created');

    if (vm.$options.el) {
        vm.$mount(vm.$options.el);
    }
};

实例挂载分析

Vue.$mount流程

从下面的代码分析可以知道,Vue.$mounte首先会判断是否有render()方法,如果没有手写render()方法,只有