浅谈vue2.0与vue3.0的区别(整理十六点)

目录

1. 实现数据响应式的原理不同

2. 生命周期不同

3. vue 2.0 采用了 option 选项式 API,vue 3.0 采用了 composition 组合式 API

4. 新特性编译宏

5. 父子组件间双向数据绑定 v-model 不同

6. v-for 和 v-if 优先级不同

7. 使用的 diff 算法不同

8. 兄弟组件间的通信 eventBus

9. vue 3.0 提供了 TypeScript 支持

10. 脚手架不同

11. 获取 DOM 的方法不同

12. vue-router 的使用细节

13. vuex 与 pinia

14. vue 3.0 废除了 filters 过滤器的使用

15. template 模版中根标签的问题

16. 语法细节的不同

写在最后:


1. 实现数据响应式的原理不同

① vue 2.0: 

  • 通过 es5 的语法 Object.defineProperty(),数据劫持的方式实现数据的响应式。

② vue 3.0:

  • 通过 Proxy 代理对象的方式实现数据的响应式。
  • 因此,又多了一些定义响应式数据的方法,如 ref、reactive、roRef、toRefs
    • ref:接收简单类型或者对象类型的数据传入并返回一个响应式的对象(RefImpl)修改值,获取值的时候,需要.value
    • reactive:接受对象类型数据的参数传入并返回一个代理响应式的对象。(Proxy)
      • toRef:转换响应式对象某个属性为单独响应式数据,并且值是关联的
      • toRefs:转换响应式对象所有属性为单独响应式数据,并且值是关联的

2. 生命周期不同

① vue 2.0 一共 10 个生命周期

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • activated:keep-alive 组件缓存技术,激活
  • deactivated:keep-alive 组件缓存技术,未激活
  • beforeDestroy
  • destroyed

② vue 3.0 一共 7 个生命周期

  • setup
  • onBeforeMount
  • onMounted
  • onBeforeUpdate
  • onUpdated
  • onBeforeUnmount
  • onUnmounted

总结:

  • 废弃了 activated、deactivated 生命周期函数。
  • setup 函数是整个组件的起点,执行时机在 beforeCreate 之前,所以没有办法拿到当前组件实例 this。
  • 但是 setup 函数里可以接收两个形参 props 和 context
    • props 为属性
    • context 为当前组件实例,也是就相当于vue 2.0 中的 this。
  • vue 3.0 中的生命周期函数使用函数调用的方式执行,所以可以多次调用执行。

3. vue 2.0 采用了 option 选项式 API,vue 3.0 采用了 composition 组合式 API

① option API

  • 数据定义在 data 里,属性定义在 props 里,计算属性定义在 computed 里,方法定义在 methods 里。
  • 相较于 vue 3.0 则更易于学习和使用。

② composition API

  • 一个功能逻辑的代码组合在一起。
  • 相较于 vue 2.0 更易于阅读和维护。

小插曲,谈一谈自己对于 vue 2.0 和 vue 3.0 的选项式 API 和组合式 API 的理解:

vue 3.0 是在 2020 年 10 月发布的。由于写 vue 2.0 的时间比较早,所以当时在转入 vue 3.0 的时候,并没有花太多时间。感受最深的一点就是,在 vue 3.0 中无法使用 this,前文已经谈过 this 的问题,在这里不再赘述。而 vue 3.0 也可以分为两个版本,vue 3.3 以下的版本,其实感觉还是 option API 的写法,因为在 setup 函数平级的节点中,依然可以定义 props 和 components 节点,只不过是把数据和方法定义在 setup 函数里,然后通过 return 出来使用。

在 vue 3.3 及 3.3 以上的版本中,引入了 <script setup> 语法糖。此时,props 和 components 这些节点就不存在了,setup 函数也没有 return 了,那么为了使用 props 和 context 等,又提供了一些新的编译宏

4. 新特性编译宏

常用的编译宏如下:

  • defineProps:定义属性
  • defineEmits:定义自定义的事件的触发

  • defineExpose:向外暴露组件的属性和方法

    • 在非语法糖的写法中,通过 setup 函数的 return 出来了属性和方法,所以无须使用defineExpose

  • defineOptions:向外暴露组件的一些自定义属性,如 name

  • defineModel:vue 3.0 中父子组件间的双向数据绑定

    • const modelValue = defineModel()

5. 父子组件间双向数据绑定 v-model 不同

① vue 2.0:

  • 父组件默认传递的属性是 value,子组件默认触发的自定义事件是 input

② vue 3.0:

  • 父组件默认传递的属性是 modelValue,子组件默认触发的自定义事件是 update:modelValue

6. v-for 和 v-if 优先级不同

  • vue 2.0 中 v-for 的优先级高
  • vue 3.0 中 v-if 的优先级高

7. 使用的 diff 算法不同

① vue 2.0

  • 同级比较,根元素变化,整个 dom 树删除重建
  • 根元素未变
    • 属性改变,更新属性
    • 子元素内容改变
      • 无 key 就地更新
      • 有 key 按 key 比较

② vue 3.0

  • 将静态节点与动态节点分离
  • 通过高效标记和打补丁的方式,更新 dom

总结:

  • 所以 vue 3.0 的渲染性能优于 vue 2.0

8. 兄弟组件间的通信 eventBus

  • vue 2.0 中的 eventBus 是一个 vue 的实例对象
  • vue 3.0 中的eventBus 是 mitt 库

9. vue 3.0 提供了 TypeScript 支持

10. 脚手架不同

  • vue 2.0 的打包工具是 webpack
  • vue 3.0 的打包工具是 vite

11. 获取 DOM 的方法不同

  • vue 2.0 直接绑定 ref,使用 this.ref.属性名的方式直接获取
  • vue 3.0 需要先定义 const box = ref(null),再进行绑定

12. vue-router 的使用细节

① vue 2.0 

  • 通过 this.$router 和 this.$route 拿到全局的路由对象和当前的路由对象
  • 路由前置守卫
    • to: 即将要进入的目标 路由对象
    • from:当前导航正要离开的路由
    • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
      • next(): 放行路由跳转
      • next(false):拦截路由跳转
const router = new VueRouter({ ... })router.beforeEach((to, from, next) => {// ...
})

② vue 3.0 

  • 通过 const router = useRouter() 和 const route = useRoute() 拿到全局的路由对象和当前的路由对象
  • 路由前置守卫
    • 少了 next 
    • return false 拦截回 from 的地址页面
    • return undefined / true 直接放行

const router = createRouter({ ... })router.beforeEach((to, from) => {// ...// 返回 false 以取消导航return false
})

13. vuex 与 pinia

① vue 2.0 vuex

  •  state 定义数据
  • mutations 执行同步代码,修改 state 中的数据必须通过 mutations,在组件中通过 commit 提交 mutation 的方式
  • actions 执行异步操作,在组件中通过中通过 dispatch 派遣 action 的方式
  • getters 类似于 computed 计算属性或者过滤器
  • modules 模块化

② vue 3.0 pinia

  • 将 mutations 和 actions 合二为一,不在区分同步和异步操作,去掉了 modules 模块化的概念,每一个 store 都是一个独立的模块
  • 提供了丰富的插件配置及配置对象,如在实现数据本地持久化上,可以通过插件直接配置 persist: true就可以直接实现。
    • 当时写 vue 2.0 的项目,记得是自己封装了一个 get、set 操作 localstorage 的方法去实现本地数据的持久化 

14. vue 3.0 废除了 filters 过滤器的使用

15. template 模版中根标签的问题

  • vue 2.0 中必须有一个根标签元素,vue 3.0 则不用

16. 语法细节的不同

  • 此外就是一些语法上的使用细节,不做深入比较阐述了。
  • 如:vue 3.0 一般是通过 Createxxx 创建实例
    • CreateApp 创建 vue 实例
    • CreateRouter 创建路由对象
    • CreatePinia 创建 pinia

写在最后:

个人实际开发中,使用下来感受到的区别和不同点,欢迎大佬们修正与补充。借用人民日报今年的广告语,“请你努力,为了你自己。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428593.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年及未来:构筑防御通胀的堡垒,保护您的投资

随着全球经济的波动和不确定性&#xff0c;通货膨胀已成为投资者不得不面对的现实问题。通胀会侵蚀货币的购买力&#xff0c;从而影响投资的实际回报。因此&#xff0c;制定有效的策略来保护投资免受通胀影响&#xff0c;对于确保资产的长期增值至关重要。在2024年及未来&#…

nginx架构篇(三)

文章目录 一、Nginx实现服务器端集群搭建1.1 Nginx与Tomcat部署1. 环境准备(Tomcat)2. 环境准备(Nginx) 1.2. Nginx实现动静分离1.2.1. 需求分析1.2.2. 动静实现步骤 1.3. Nginx实现Tomcat集群搭建1.4. Nginx高可用解决方案1.4.1. Keepalived1.4.2. VRRP介绍1.4.3. 环境搭建环境…

口碑最好的头戴式耳机是哪些?高品质头戴式耳机对比测评揭晓

头戴式耳机以其出色的音质表现和舒适的佩戴体验&#xff0c;成为了音乐爱好者和日常通勤用户的热门选择。而在众多品牌和型号中&#xff0c;口碑最好的头戴式耳机是哪些&#xff1f;面对市场上丰富的选择&#xff0c;找到一款音质优良、佩戴舒适且性价比高的耳机并不容易。今天…

美畅物联丨技术前沿探索:H.265编码与畅联云平台JS播放器的融合应用

一、H.265 编码&#xff1a;视频压缩技术的重大变革 H.265&#xff0c;即被熟知为高效视频编码&#xff08;HEVC&#xff0c;High Efficiency Video Coding&#xff09;&#xff0c;由国际电信联盟电信标准化部门视频编码专家组&#xff08;ITU-T VCEG&#xff09;与国际标准化…

俄罗斯OZON新生儿产品好不好卖,OZON新生儿产品

Top1 遥控水球坦克 Танк на радиоуправлении стреляющий орбизами PANAWEALTH 商品id&#xff1a;1384249985 月销量&#xff1a;692 欢迎各位OZON卖家朋友点击这里选品&#xff1a; &#x1f449; D。DDqbt。COm/74rD 遥控射击水…

Java中Set的巧妙用法---查找重复元素/去重/排序

目录 1. Set特性&#xff1a; 3. TreeSet 3.1定制排序&#xff08;比较器排序&#xff09; 3.2自然排序&#xff1a; 4. LinkedHashSet 在日常开发中不可避免会遇到需要去重&#xff0c;或者查找重复元素&#xff0c;下面给介绍一种效率比较高的方法&#xff0c;时间复杂度…

Git使用教程-将idea本地文件配置到gitte上的保姆级别教程

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

weblogic CVE-2018-2894 靶场攻略

漏洞描述 Weblogic Web Service Test Page中⼀处任意⽂件上传漏洞&#xff0c;Web Service Test Page 在 "⽣产模式"下默认不开启&#xff0c;所以该漏洞有⼀定限制。 漏洞版本 weblogic 10.3.6.0 weblogic 12.1.3.0 weblogic 12.2.1.2 28 weblogic 12.2.1.3 …

传统美业通过小魔推短视频矩阵系统,实现逆势增长?

许多美甲店在经营过程中常常陷入一个误区&#xff1a;他们认为自己缺少的是客户&#xff0c;但实际上&#xff0c;他们真正缺少的是有效的营销策略&#xff0c;美甲店经营者普遍面临的两大难题包括&#xff1a; 1. 高客户流失率&#xff1a; 据研究显示&#xff0c;约70%的顾…

初识linux(2)

接着上篇的初识linux(1)来接着说没看过的可以去看看 cp指令 语法&#xff1a;cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录&#xff0c;如同时指定两个以上的文件或目录&#xff0c;且最后的目的地是一个已经存在的目录&#…

Python和C++及R相关系数数学统计学可视化和神经模型及评估指标

&#x1f3af;要点 较少统计样本显著性评估和变量关系梳理功能磁共振成像一致性分析检测非单调关联性结构随机变量动力学相关性热图和矩阵图基因疫苗非线性变量相关性 Python相关矩阵 相关矩阵 n n n 个随机变量 X 1 , … , X n X_1, \ldots, X_n X1​,…,Xn​ 的相关矩阵…

CTF流量分析题目一把梭,零基础入门到精通,收藏这一篇就够了

https://github.com/Arinue/CTF-NetA CTF-NetA是一款专门针对CTF比赛的网络流量分析工具&#xff0c;可以对常见的网络流量进行分析&#xff0c;快速自动获取flag。而且是有gui图形界面的&#xff0c;有了它即使小白也能轻松应对流量分析题目&#xff0c;不得不说这CTF工具太专…

论文笔记:交替单模态适应的多模态表征学习

整理了CVPR2024 Multimodal Representation Learning by Alternating Unimodal Adaptation&#xff09;论文的阅读笔记 背景MLA框架实验Q1 与之前的方法相比&#xff0c;MLA能否克服模态懒惰并提高多模态学习性能?Q2 MLA在面临模式缺失的挑战时表现如何?Q3 所有模块是否可以有…

Java 多态(难)

1. 即同一方法可以根据发送对象的不同而采用多种不同的行为方式。 2&#xff0e;一个对象的实际类型是确定的&#xff0c;但可以指向对象的引用的类型有很多。 举例说明&#xff1a;新建两个类&#xff0c;Person类和Student类&#xff0c;Student类继承Person类&#xff1a…

【学习笔记】数据结构(六 ①)

树和二叉树 &#xff08;一&#xff09; 文章目录 树和二叉树 &#xff08;一&#xff09;6.1 树(Tree)的定义和基本术语6.2 二叉树6.2.1 二叉树的定义1、斜树2、满二叉树3、完全二叉树4、二叉排序树5、平衡二叉树&#xff08;AVL树&#xff09;6、红黑树 6.2.2 二叉树的性质6.…

Linux启动流程,0,1,2进程,init进程,idle进程,内核态到用户态的kernel_execve(一)

&#xff1f;是&#xff0c;如果定义了&#xff0c;就按Makefile的&#xff0c;如果如下make编译时&#xff0c;就按如下 linux内核入口 进程0在用户空间看不到&#xff0c;因为他是内核进程 进程2就是守护进程&#xff0c;维护内涵运转的 一生二&#xff0c;二生三&#xff…

Redis中Hash(哈希)类型的基本操作

文章目录 一、 哈希简介二、常用命令hsethgethexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloathstrlen 三、命令小结四、哈希内部编码方式五、典型应用场景六、 字符串&#xff0c;序列化&#xff0c;哈希对比 一、 哈希简介 几乎所有的主流编程语言都提供了哈…

CANopen开源库canfestival的移植

本文记录将CANopen开源库CANfestival移植到GD32F470单片机的过程。CANopen协议理解请参考博客&#xff1a;CANopen协议的理解-CSDN博客 CANfestival开源库下载链接 CSDN链接&#xff1a; https://download.csdn.net/download/heqiunong/89774627 官网链接&#xff1a;https:/…

智能BI项目第五期

本期主要内容 系统问题分析异步化业务流程分析线程池讲解&#xff08;入门 原理 实战&#xff09;系统异步化改造开发 1.系统问题分析 当系统面临大量用户请求时&#xff0c;我们后端的 AI 处理能力有限&#xff0c;例如服务器的内存、CPU、网络带宽等资源有限&#xff0c…

基于微信小程序的游泳馆管理系统--论文源码调试讲解

2 关键技术介绍 2.1 SSM框架 开发信息管理系统的主流框架是SSM&#xff08;Spring Spring MVC MyBatis&#xff09;&#xff0c;SSM框架web层使用Spring MVC框架&#xff0c;使传输前后端数据变得简单&#xff1b;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框…