玩转 Vue 3 全家桶
大圣
前百度前端架构师
38321 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
玩转 Vue 3 全家桶
15
15
1.0x
00:00/00:00
登录|注册

29|运行时:Vue在浏览器里是怎么跑起来的?

patchProp
nodeOps
服务端渲染的客户端激活
processComponent
processElement
processText
执行 unmountpatch
判断 _vnode
rendererOptions
createRenderer
mount
createApp
hydrate 函数用途
setupComponentsetupRenderEffect 执行组件逻辑
patch 实现组件渲染
createApp 创建应用
Vue.js 在浏览器中的执行全流程
执行 patch 初始化子组件
监听数据变化
注册响应式 effect 函数
执行组件的 setup 函数
执行 setupStatefulComponent
初始化 propsslots
执行 setupRenderEffect
执行 setupComponent
创建组件实例
updateComponent
mountComponent
执行相应的处理函数
判断节点类型
对比虚拟DOM n1n2
mount 执行 render 方法
注册 usecomponentmount 等方法
创建 app 对象
render 方法
返回 createAppAPI 的结果
渲染、更新组件的工具函数
定义 patchmountunmount 等函数
baseCreateRenderer
渲染器选项
创建浏览器渲染器
使用闭包缓存渲染器 renderer
初始化渲染
调用 ensureRenderermount
查找DOM元素
重写 app.mount
使用 ensureRenderer 创建 app
简化源码理解
定义在 runtime-dom
初始化渲染入口
应用挂载
创建应用
思考题
总结
setupRenderEffect 函数
setupComponent 函数
mountComponent 函数
首次渲染 processComponent
patch 函数
createAppAPI 函数
createApp 函数执行逻辑
createRenderer 函数
ensureRenderer 函数
应用挂载 mount
创建应用 createApp
Vue.js 总体流程
Vue.js 运行时原理

该思维导图由 AI 生成,仅供参考

你好,我是大圣。
上一讲我们学习了 Vue 响应式的大致原理,响应式就是可以把普通的 JavaScript 对象包裹成响应式对象,这样,我们对对象做的修改,响应式都能够监听到,并且执行 effect 内部注册的函数来执行数据修改之后的效果。
那今天我就跟你聊一下 Vue 在浏览器里是如何运行的,照例我们还是对着 Vue 3 的源码来学习,不过源码复杂,为了帮助你理解主要逻辑,我会直接把源码简化再演示,当然怎么简化源码的一些小技巧也会顺便分享给你。
好了废话不多说,我们马上开始。前端框架需要处理的最核心的两个流程,就是首次渲染和数据更新后的渲染。先来看首次渲染的源码。演示代码会用 Vue 3 的实际代码,你也可以在 weiyouyi 项目中看到我们课程的 mini 版本代码。

首次渲染

我们知道,想要启动一个 Vue 项目,只需要从 Vue 中引入 createApp,传入 App 组件,并且调用 createApp 返回的 App 实例的 mount 方法,就实现了项目的启动。这个时候 Vue 也完成了首次渲染,代码逻辑如下:
所以 createApp 就是项目的初始化渲染入口。
但是这段简单的代码是怎么完成初始化渲染的呢?我们可以在 Vue 中的 runtime-dom 中看到 createApp 的定义,你可以打开 GitHub 链接查看。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Vue 3源码解析:深入理解浏览器中的Vue运行机制 本文通过对Vue 3源码的简化演示,详细解释了Vue在浏览器中的初始化渲染和数据更新后的渲染过程。首先介绍了createApp的初始化渲染入口,然后深入分析了ensureRenderer函数和createRenderer函数的工作原理,以及其返回的createApp方法。文章还简化了createRenderer函数的主要逻辑,包括插入、删除、更新组件等操作。最后,通过createAppAPI方法创建了app对象,并详细解释了mount方法的执行过程,以及patch函数的执行逻辑。整个过程清晰展示了Vue在浏览器中的运行机制,为读者提供了深入理解Vue源码的重要参考。 文章通过对patch函数的代码进行解析,展示了在虚拟DOM节点类型不同的情况下的处理方式,以及对不同类型的节点执行不同的处理函数。进一步深入到processComponent方法的内部实现,解释了首次渲染和更新组件时的执行逻辑。同时,通过setupComponent和setupRenderEffect函数的分析,展示了组件首次加载和更新时的具体实现流程。 总结来看,本文详细解析了Vue 3在浏览器中的执行流程,包括创建应用、挂载、渲染和更新等关键步骤。读者可以通过本文了解到Vue源码中的优秀设计思路,如闭包缓存和位运算的应用,对提高日常项目的代码质量具有积极的借鉴意义。 在技术特点方面,本文突出了对Vue 3源码的深入解析,涵盖了初始化渲染、组件处理、响应式数据更新等关键技术细节,为读者提供了全面了解Vue在浏览器中运行机制的机会。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《玩转 Vue 3 全家桶》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • 百事可乐
    萌新表示看不懂

    编辑回复: 具体哪里没看懂可以留言提问~

    2022-01-26
    2
    1
  • 关关君
    hydrate函数是不实现SSR的? https://en.wikipedia.org/wiki/Hydration_(web_development)

    作者回复: yes 俗称注水

    2022-01-19
    1
  • openbilibili
    weiyouyi运行时的代码 应该怎么样去测试呢?

    作者回复: 我正在给runtime加测试~~

    2022-01-05
  • 鱼腩
    果然涉及源码解释的视乎视频更适合——所见即所得。 而看文档听语音,对照源码,难上加难
    2021-12-31
    5
    23
  • Mr_shaojun
    自己先看一遍代码, 然后再来看课程,感觉收获非常大
    2022-12-28归属地:浙江
    4
  • 大果子
    大佬,求画图软件?
    2022-09-20归属地:广东
    3
  • 灵感_idea
    这个东西,感觉还是肢解着讲更合适,从简单到复杂,然后慢慢丰富起来,再用上技巧,不过这样以来,如此篇幅的一节课是不够的,哈哈。
    2023-09-25归属地:广东
    1
  • NULL
    hydrate: 供水的。
    2023-12-30归属地:美国
  • 哎呦先生
    大圣老师,patch时传递了虚拟dom,虚拟dom是在哪一步解析生成的呢?虚拟dom解析的流程是什么?
    2022-06-22
  • Hansen
    确实有点枯燥,可以跟着老师简版瞧一瞧!
    2022-06-14
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部