渲染器挂载过程是将vnode转化为真实dom并插入容器,由mountelement统一调度:先调用hostcreateelement创建空元素,再分层设置props、事件和指令,接着递归挂载子节点,最后精准触发onbeforemount和onmounted等生命周期钩子。

渲染器挂载过程,本质是把一个 VNode 对象“落地”为浏览器可操作的真实 DOM 节点,并插入页面指定容器。这个过程不依赖手动操作 document,而是由 Vue 内部的 mountElement 函数统一调度完成。
元素创建:先生成空节点
挂载开始时,渲染器调用宿主方法 hostCreateElement(Web 平台默认是 document.createElement)创建基础 DOM 元素。对带命名空间的标签(如 svg、math),会自动处理命名空间,确保语义正确。此时节点为空,尚未设置属性、事件或子内容。
属性与事件逐层设置
props 处理不是简单遍历赋值,而是按类型分层执行:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- DOM 属性(如
id、value)直接赋值到元素实例:el.id = 'app' - HTML 特性(如
data-id、aria-label)调用setAttribute - 事件监听器(如
@click)经addHandler封装,支持.once、.capture等修饰符 - 指令(如
v-show、v-model)在子节点挂载前触发beforeMount,挂载后执行mounted钩子
子节点递归挂载
真实 DOM 元素创建并设置好 props 后,才开始处理子节点:
- 若子节点是数组(多个 VNode),逐个调用
patch插入 - 若子节点是文本,调用
hostCreateText创建文本节点 - 若子节点是 Fragment 或 Teleport,仍能正确插入目标容器,因挂载时机已保证父元素已存在
生命周期钩子触发
挂载流程中关键钩子被精准调度:
-
onBeforeMount在 render 执行后、patch 开始前触发 -
onMounted通过queuePostRenderEffect延迟到整个组件树 patch 完成、DOM 真实插入文档流后执行 - 组件自身的
mounted钩子与指令的mounted钩子同步激活









