2023-11-12 22:11:55
Vue实例挂载(mount)的实现机制在Vue2和Vue3中存在显著差异,以下是具体解析:
Vue2的挂载实现实例化与根元素绑定
通过new Vue()操作符创建实例,根DOM元素通过el配置项传入(如el: '#app')。
实例化过程中,Vue会解析模板并生成虚拟DOM(VNode),最终将真实DOM挂载到指定的根元素上。
挂载流程
调用$mount()方法(若未在实例化时传入el,需手动调用)。
内部通过mountComponent初始化组件,触发渲染和更新周期,最终通过DOM操作将内容插入根元素。
实例化与挂载分离
使用createApp()替代new Vue(),返回应用实例。
挂载方法mount()独立于实例化步骤,需显式调用(如createApp(App).mount('#app'))。
核心流程
创建渲染器:createApp()内部调用ensureRenderer(),通过闭包保留渲染逻辑(如render、patch)。
生成公共API:返回包含mount、component等方法的对象,支持扩展全局组件或指令。
挂载阶段:
清空目标DOM(如id="app"的容器)。
调用createBaseVNode生成根VNode,传递给render函数。
进入patch流程:
若组件使用template,触发mountComponent,初始化实例并执行setup。
渲染生成VNode后,通过hostInsert等原生DOM API将节点插入容器。
无论版本如何,挂载的核心步骤均为:
学习建议:结合Vue3源码中的createApp和patch函数深入理解,或参考相关视频教程(如“前端免费学习笔记”)。