Vue.js渲染流程中CreateApp阶段VNode的初始化触发

老涛小哥_2088

老涛小哥_2088

2026-03-21

498人浏览

原创

vnode 初始化发生在 app.mount() 后首次执行 render 函数时,而非 createapp 阶段;createapp 仅创建应用实例,不生成 vnode;真正构造首个 vnode 树由 rendercomponentroot 完成。

vue.js渲染流程中createapp阶段vnode的初始化触发

在 Vue 3 的渲染流程中,createApp 阶段本身并不直接触发 VNode 的初始化。VNode 的创建发生在后续的挂载(app.mount())过程中,确切地说,是在首次执行 render 函数时才生成。

createApp 只创建应用实例,不涉及 VNode

createApp 的核心作用是创建一个应用实例(app),它封装了组件配置、插件注册、全局属性等能力,但此时模板尚未编译,DOM 未关联,也**没有 render 函数执行,更没有 VNode 产生**。

  • 它返回的 app 对象是一个可配置的容器,内部持有 rootComponent(通常是用户传入的组件选项对象)和 rootProps
  • 此时组件的 setup、render、模板编译逻辑都未运行
  • VNode 是“虚拟节点”的运行时表示,必须依赖响应式系统激活 + 渲染器(renderer)+ 模板或 render 函数才能生成

真正触发 VNode 初始化的时机:mount 时的首次 patch

当调用 app.mount(selector) 后,Vue 才启动真正的渲染流水线:

  • 若根组件有 render 函数,直接调用它,返回 VNode
  • 若只有 template,会先通过编译器(runtime compiler)生成 render 函数,再执行得到 VNode
  • 接着将该 VNode 传给底层渲染器(如 baseCreateRenderer 中的 patch),进入“创建真实 DOM → 关联响应式依赖 → 建立更新队列”流程

这个过程中的第一次 render() 调用,才是 VNode 初始化(即首次构造)的明确起点。

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.2万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习