回顾
如果有感兴趣的同学可以看看我之前的源码分析文章,这里呈上链接:《Vue源码分析系列:目录》
'platforms/web/entry-runtime-with-compiler'
'platforms/web/runtime/index'
'core/instance/index'
,定义Vue
.initMixin()
,定义_init()
._init()
options
合并 合并配置initRender()
,定义$createElement()
createElement的执行过程- 调用
createComponent
createComponent的执行过程
- 调用
- 生命周期
beforeCreate()
initState()
,将data
代理至Vue._data
data的代理- 生命周期
created()
- 执行
$mount
,挂载#app
$mount执行过程
lifecycleMixin()
,定义了_update()
,$forceUpdate()
,$destroy()
.renderMixin()
,定义了$nextTick()
,_render()
._render()
- 调用用户自定义的
render()
,用户调用了$createElement()
- 调用用户自定义的
- 定义了一个
$mount
(runtime 版本的$mount
),调用mountComponent()
'core/instance/lifecycle'
,定义mountComponent()
- 生命周期
beforeMount()
- 定义
updateComponent()
- 调用
_render()
,生成一个VNode render的执行过程 - 调用
_update()
,传入_render()
生成的VNode- 调用
__pathch__
,渲染至DOM patch的执行过程、组件的patch过程
- 调用
- 调用
- 生成渲染
watcher
- 生命周期
beforeUpdate()
- 生命周期
- 生命周期
mounted()
- 生命周期
- 重新定义了一个
$mount()
- 新的
$mount()
(runtime + compiler 的$mount
)- 编译
template
,生成render
- 调用
$mount
(调用 runtime 版本的$mount
)
- 编译
- 新的
从new Vue()
开始 => init
初始化Vue => $mount
挂载 => complier
编译模板 => render
渲染VNode => update
更新DOM => patch
DOM打补丁 => DOM