Vue实例挂载过程中发生了什么
挂载指的是在app.mount()
调用时的整个过程
流程
- 首先获取挂载点的
DOM
元素,然后去清空html
mount
- 开始创建
node
元素 - 触发
render
函数patch(rootVNode)
- 处理组件类型(
Text
,Comment
,Fragment
,Component
) - 如果是
components
,会进行组件的实例化(createComponentInstance
->setupComponent
),双向绑定过程(setupRenderEffect
)- 在
setupComponent
里还会进行初始化Props
,slots
(initProps
,initSlots
)
- 在
- 处理组件类型(
- 开始创建
mount
首先会先调用normalizeContainer()
获取到dom
挂载元素的位置,之后再调用mount
去执行挂载
这里的mounted
函数会先创建VNode
根节点,调用render函数将VNode
转换为真实的DOM
元素
patch
在初始化的过程中,进行VNode
对比,根据得出来的结果创建节点并挂载到DOM
中
mountComponent
用于实例化组件,并完成数据与VNode
的双向绑定
主要执行了初始化Props
属性(initProps
),初始化插槽(initSlots
),执行setup
中的代码内容并到template
中的模板编译成render
渲染函数,到最后执行onMounted
钩子函数,表示已经挂载完毕(如果组件中还有组件,会递归调用patch
函数)