Vue3与Vue2生命周期对比:新特性解析与差异探讨

简介: Vue3与Vue2生命周期对比:新特性解析与差异探讨

Vue3新版本的理念成型于 2018 年末,当时的 Vue 2 已经有两岁半了。比起通用软件的生命周期来这好像也没那么久,Vue3在2020年正式推出,在源码和API都有较大变化,性能得到了显著的提升,比Vue2.x快1.2~2倍。

一、Vue3的新特性
  • 速度更快
  • 重写了虚拟Dom实现
  • 编译模板的优化
  • 更高效的组件初始化
  • undate性能提高1.3~2倍
  • SSR速度提高了2~3倍
  • 体积减少
  • 对开发人员,能够对vue实现更多其他的功能,而不必担忧整体体积过大
  • 对使用者,打包出来的包体积变小了
  • 更易维护
  • compositon Api可与现有的Options API一起使用
  • 灵活的逻辑组合与复用
  • Vue3模块可以和其他框架搭配使用
  • VUE3是基于typescipt编写的,可以享受到自动的类型定义提示
  • 更接近原生
  • 可以自定义渲染 API
  • 更易使用
  • 响应式 Api 暴露出来

Vue 3 生命周期是指 Vue 组件从创建到销毁的整个过程,包括创建阶段、挂载阶段、更新阶段和销毁阶段。,就好比人生一样出生、上学、工作,vue3的生命周期和vue2有一些命名不一样,我们将之对比。


二、vue3 与 vue2 生命周期对比
vue2 vue3 说明
beforeCreate setup() 开始创建组件之前,实例被创建,还没有初始化好data和methods等属性
created setup() 已初始化好data和method等,但还没有开始编译模板
eforeMount onBeforeMount 模板编译完成,但还没有挂载到页面中
mounted onMounted 把编译好的模板挂载到页面容器中显示,此周期用的较多
beforeUpdate onBeforeUpdate 把data渲染到界面之前执行
updated onUpdated 把data数据更新到UI完成后
beforeDestroy onBeforeUnmount 销毁实例之前执行
destroyed onUnmounted 销毁实例完成后执行
activated onActivated 被 keep-alive 缓存激活时调用
deactivated onDeactivated 被 keep-alive 缓存睡眠时调用
rorCaptured onErrorCaptured 捕获子孙组件的错误时被调用此钩子包含三个参数:错误对象、组件实例、一个包含错误来源信息的字符串。可以返回 false 以阻止该错误继续向上传播。


在创建阶段,Vue 3 新增了 setup() 函数,用于替代 Vue 2 的 beforeCreate 和 created 钩子函数。setup() 函数是一个函数,可以接收 props、context 和 next 函数作为参数,并返回一个对象或一个 Promise 对象。在 setup() 函数中,我们可以直接访问组件的实例属性和方法,以及通过 next() 函数来访问父组件中的属性和方法。


在更新阶段,Vue 3 新增了 onRenderTracked 和 onRenderTriggered 钩子函数。onRenderTracked 钩子函数会在组件的渲染跟踪列表中触发,可以用于优化渲染性能。onRenderTriggered 钩子函数会在组件的渲染触发器列表中触发,可以用于执行副作用操作。


除了新增的生命周期钩子函数之外,Vue 3 还对一些生命周期钩子函数进行了改进和优化。例如,beforeMount 和 mounted 钩子函数合并为了一个 mounted 钩子函数;beforeUpdate 和 updated 钩子函数合并为了一个 updated 钩子函数。这些改进和优化使得 Vue 3 的生命周期更加简洁和易于使用。


总之,Vue 3 与 Vue 2 的生命周期相比,主要区别在于创建阶段的 setup() 函数和更新阶段的 onRenderTracked 和 onRenderTriggered 钩子函数。这些新增和改进的生命周期钩子函数使得 Vue 3 的开发更加高效和便捷。


三、Setup 组合式例子
<script setup>
  import { reactive, ref ,onMounted} from "vue";   
  //把编译好的模板挂载到页面容器中显示时执行
  onMounted(()=>{
   console.log('编译模板完成')
  })
</script>


需要注意的是,Vue 3 中引入了 setup 方法,将原来的 data、computed、watch、methods 等 API 整合到一起,使得组件的逻辑更加清晰和易于维护。同时,Vue 3 中还引入了 context 对象,使得组件内部可以更加方便地访问外部数据和 API。


四、根节点的区别

vue2中只能有一个根标签,但是在vue3中根组件已经可以有多个根节点了。


在vue2中只所以这么做是因为vdom是一颗单根树形结构,patch方法在遍历的时候从根节点开始遍历,它要求只有一个根节点,组件也会转换为一个vdom,自然满足这个要求vue3中值所以可以有多个节点,是因为引入了Fragment的概念,这是一个抽象的节点,如果发现组件有多个根,就创建一个Fragment节点,把多个根节点作为它的children,将来path的时候,如果发现是一个Fragement节点,则直接遍历children创建或更新。


五、双向数据绑定原理

Vue2使用ES5的Object.defineProperty() API对数据进行劫持,并结合发布订阅模式实现双向数据绑定。而Vue3则使用ES6的Proxy API对数据进行代理,从而进行双向数据绑定。使用Proxy API可以省去for in、闭包等内容来提升效率,同时可以监听整个对象,而不仅仅是某个属性。另外,Proxy API还可以检测到数组内部数据的变化,这是Object.defineProperty()无法实现的。

六、父子组件的生命周期顺序
  • 加载渲染过程 :
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
  • 子组件更新过程:
父beforeUpdate->子beforeUpdate->子updated->父updated
  • 父组件更新过程:
父beforeUpdate->父updated
  • 销毁过程:
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
目录
相关文章
|
24天前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
199 11
|
4月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
623 0
|
5月前
|
缓存 JavaScript PHP
斩获开发者口碑!SnowAdmin:基于 Vue3 的高颜值后台管理系统,3 步极速上手!
SnowAdmin 是一款基于 Vue3/TypeScript/Arco Design 的开源后台管理框架,以“清新优雅、开箱即用”为核心设计理念。提供角色权限精细化管理、多主题与暗黑模式切换、动态路由与页面缓存等功能,支持代码规范自动化校验及丰富组件库。通过模块化设计与前沿技术栈(Vite5/Pinia),显著提升开发效率,适合团队协作与长期维护。项目地址:[GitHub](https://github.com/WANG-Fan0912/SnowAdmin)。
793 5
|
8天前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
83 0
|
5月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
594 77
|
2月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
321 1
|
2月前
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
165 0
|
3月前
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
107 0
|
4月前
|
JavaScript 前端开发 UED
Vue 手风琴实现的三种常用方式及长尾关键词解析
手风琴效果是Vue开发中常见的交互组件,可节省页面空间、提升用户体验。本文介绍三种实现方式:1) 原生Vue结合数据绑定与CSS动画;2) 使用Element UI等组件库快速构建;3) 自定义指令操作DOM实现独特效果。每种方式适用于不同场景,可根据项目需求选择。示例包括产品特性页、后台菜单及FAQ展示,灵活满足多样需求。附代码示例与资源链接,助你高效实现手风琴功能。
185 10

推荐镜像

更多
  • DNS