当前位置: 首页 > article >正文

Vue2 和 Vue3 有什么区别?

1. 数据双向绑定的响应式原理不同

  • vue2 在初始化的时候,对 data 中的每个属性使用 Object.defineProperty() 调用 get 和 set 使之变为响应式对象。
    如果属性值为对象,需要递归调用 defineProperty 使之变为响应式对象。
    缺陷:Object.defineProperty() 后添加的属性是劫持不到的,所以在 methods 方法里操作(添加或删除)对象属性值时,会造成数据更新,视图不更新。
    • 使用 this.$set(this.obj, ‘c’, ‘3’)
  • vue3 使用 ES6 的 new Proxy() (对数据进行代理)对象重写响应式。
    即使后添加的也可以劫持到,不会造成数据更新,视图不更新。
    proxy可以拦截属性的访问、赋值、删除等操作,不需要初始化的时候遍历所有属性,在多层属性嵌套时,只有访问某个属性才会递归处理下一级的属性。
  • 响应式原理改成了用proxy,解决了数组无法通过下标修改,无法监听到对象属性的新增和删除问题。也提升了响应式的效率
  • vue3并不是完全抛弃了defineProperty,通过reactive定义的响应式数据使用proxy包装出来,而ref还是用的defineProperty去给一个空对象,定义了一个value属性来做的响应式。

2. 是否支持碎片?组件模版和语法扩展

  • vue2 支持单个根元素,不支持碎片
  • vue3 引入 fragment 支持多个根节点,template模版可以不包在一个根div里

3. API 设计不同

  • vue2 选项式API
  • vue3 组合式API(setup语法糖形式),没有this
  • 用组合式API替换选项式API,方便逻辑更加的聚合。
  • 组合式api的写法下,源码改成了函数式编程,方便按需引入,因为tree-shaking功能必须配合按需引入写法。所以vue3更好滴配合tree-shaking能让打包体积更小。

4. 定义数据变量方法不同

  • vue2 数据放在 data 里,方法放在 method 里
  • vue3 使用 setup,在组件初始化时触发

5. 生命周期钩子函数不同

  • 生命周期没有creat,setup等同于create,卸载改成unmount

6. 传值不同

  • v-model应用于自定义组件时,监听的事件和传递的值不同
    • vue2中v-model传递的是value,监听的是change或input
    • vue3中v-model传递的是modelValue,监听updata: modelValue

7. 指令和插槽不同

  • vue3中v-if高于v-for的优先级

8. main.js 不同

  • 根实例的创建从new app变成了createApp方法
  • 一些全局注册,比如mixin,注册全局组件,use改成了用app实例调用,而不是vue类调用

9. 性能优化

  • vue3增加了静态节点标记。会标记静态节点,不对静态节点进行比对。从而增加效率。
  • vue3不推荐使用mixin进行复用逻辑提取,而是推荐写成hook
    • vue2
      在这里插入图片描述
    • vue3
      在这里插入图片描述

10. ts更好地配合

11. vue3没有this.$set

12. webpack 和 vite 的不同

13. 新增了传送门teleport组件

teleport组件

14. mixin 和 hooks

  • mixin
  • hooks

http://www.kler.cn/a/301764.html

相关文章:

  • 串口DMA接收不定长数据
  • Android加载pdf
  • vue 模板语法 ( 插值表达式 | 属性绑定 | 双向数据绑定 | 指令 | 按键修饰符 )
  • Flowable 构建后端服务(后端以及数据库搭建) Flowable Modeler 设计器搭建(前端)
  • Vue 3 中的 ref 完全指南
  • [系统安全] PE文件知识在免杀中的应用
  • Windows系统安装R语言及RStudio、RTools
  • Vue3+TS项目给el-button统一封装一个点击后转圈效果的钩子函数按钮防抖
  • DFS算法专题(四)——综合练习【含矩阵回溯】【含3道力扣困难级别算法题】
  • 数据库锁有哪些?什么是死锁?
  • Java开发安全及防护
  • C语言手撕归并——递归与非递归实现(附动画及源码)
  • TS axios封装
  • FinOps原则:云计算成本管理的关键
  • Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)
  • 高教社杯数模竞赛特辑论文篇-2015年D题:众筹筑屋规划方案设计
  • AI教你学Python 第1天:Python简介与环境配置
  • Python和MATLAB及C++信噪比导图(算法模型)
  • 解开密码锁的最少次数
  • cesium.js 入门到精通(1)
  • 高级java每日一道面试题-2024年9月08日-前端篇-JS的执行顺序是什么样的?
  • php实现kafka
  • 一篇文章,讲清SQL的 joins 语法
  • Java贪心算法每日一题——179.最大数
  • 【QT】Qt窗口
  • Pr:序列设置 - VR 视频