Vue3 - runtime-core的渲染器初始化流程

前言

在创建一个 Vue 3 项目时,通常会看到三个核心文件: main.js:应用入口 index.html:页面入口 App.vue: 根组件 本文将以这三个文件为例,简述 Vue 应用的初始化流程

流程

在 main.js 中,我们导入了 createApp 函数和根组件 App.vue

一、从入口开始:createApp 与 mount

createApp(App).mount('#app')

createApp(App)调用createApp传入根组件,生成它专属的mount方法

.mount('#app')让createApp(App)这个应用实例挂载到根容器(id为app的盒子),

  • mount函数内部会基于根组件App.vue生成一个虚拟节点vnode
  • 调用render函数 进行渲染,负责将虚拟DOM渲染到真实DOM

二、创建虚拟节点:vnode 的结构

基于根组件来创建虚拟节点vnode

创建出来的虚拟节点vnode属性如下:

三、渲染入口:render 与 patch

调用 render 函数

  1. render函数只是一个渲染器的入口,负责接收接收虚拟节点和容器,开启渲染过程

可以看见render函数内部也主要是调用patch函数,

  1. patch()主要会根据vnode.type以及shapeFlag去判断节点属于什么类型,进而调用相应类型的处理方法processxxxx()

这里App是组件类型,所以用processComponent处理

四、处理组件:processComponent 与 mountComponent

  1. 不管是什么类型的节点,都会在这个时候判断,这个节点之前是否存在,是选择初始化节点mountxxx(),还是更新节点

由于这是组件首次渲染,调用patch传下来的第一个参数应该是null,即没有n1,

所以到达processComponent之后,会先进行mountComponent

五、组件实例的创建与设置

  1. 然后进行相应的流程 mountxxx()/更新节点

mountComponent会先去创建 component instance对象,再调用setupComponent设置组件实例,最后调用setupRenderEffect设置渲染效果。

ps:也是可以粗略的看看instance对象的属性

相关推荐
ModyQyW17 分钟前
vite-plugin-uni-manifest 更新了什么
前端·typescript·uni-app
Asize1 小时前
AI 协作开发新范式:我用 SDD 做了个排版 npm 包
前端·人工智能
kyriewen3 小时前
我把今年流传的前端 AI 面试题整理了一遍——4 类场景题+回答框架(附速查表)
前端·面试·程序员
计算机魔术师3 小时前
国产多模态模型正面硬刚Opus旗舰:差距从30%缩到3%
前端
风骏时光牛马3 小时前
程序员进阶:深度思考,解锁职场成长的底层逻辑
前端
IT_陈寒4 小时前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
爱丶不疚4 小时前
Eval: Agent 说的 Eval 是什么?从单测、TDD 到 Sentry 聊起
前端·ai编程·vibecoding
求道於盲4 小时前
python中的类型标注
前端
计算机魔术师4 小时前
从硅谷测试到全球铺开,ChatGPT广告的10亿美元秘密
前端
专业抄代码选手5 小时前
08|Fiber 上的 `useState`:状态终于属于具体组件
前端·javascript·react.js