为了更好的理解这一部分代码,上篇文章我们介绍了响应式式原理。本篇文章解读initMixin在执行完options合并后的操作,从之前看到的源码内容,我们知道接下来主要会进行一下几个操作过程。
initLifecycle
vm的生命周期相关变量初始化
initEvents
vm的事件监听初始化
initRender
initRender函数主要是为我们的组件实例,初始化一些渲染属性,比如$slots和$createElement等。
callHook
这里是调用钩子函数的方法,也就是触发之前我们options中定义的相应的生命周期函数。进行到此处变开始调用了beforeCreate钩子函数
initInjections 和 initProvide
vm的事件监听初始化,vm的状态初始化,prop/data/computed/method/watch都在这里完成初始化,因此也是Vue实例create的关键。可以先来看一下官网的描述:
提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。 然后我们来看一下initInjections 和 initProvide的执行顺序:
|
|
也就是说我们先初始化initInjections
|
|
接着定义我们的initProvide
initState
|
|
这里的主要工作主要是定义的数据进行defineReactive,可以简单看一下initData的过程: