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

在 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 3 组合式 API 与
热门下载
相关下载
精品课程
相关推荐
/
热门推荐
/
最新课程
最新文章
