Vue2和Vue3的区别至少说6点

1.响应式系统

vue2是基于defineProperty拦截具体某个属性,

vue3基于的proxy才是真正的‘代理’

defineProperty对不存在的属性无法拦截,所以vue2中所有数据必须要在data里声明

Object.defineProperty 基本用法:直接在一个对象上定义新的属性或修改现有的属性,并返回对象。

let obj = {};
let name = 'leo';
Object.defineProperty(obj, 'name', {
  enumerable: true,   // 可枚举(是否可通过 for...in 或 Object.keys() 进行访问)
  configurable: true,   // 可配置(是否可使用 delete 删除,是否可再次设置属性)
  // value: '',   // 任意类型的值,默认undefined
  // writable: true,   // 可重写
  get() {
    return name;
  },
  set(value) {
    name = value;
  }
});

Proxy Proxy 是 ES6 新特性,通过第2个参数 handler 拦截目标对象的行为。相较于 Object.defineProperty 提供语言全范围的响应能力,消除了局限性。

2.自定义渲染器

vue2所有模块是混杂在一起的,不利于扩展

vue3将响应式,运行时的相关功能都拆成了独立模块,渲染的逻辑也拆成了‘平台无关渲染逻辑’+‘待定平台渲染API’(比如web开发就加入浏览器api)

3.生命周期

对于生命周期来说。整体上变化不大,只是大部分生命周期钩子名称上+‘on’,功能上是相似的,但是vue3在组合式api中使用生命周期钩子函数时需要先引入,vue2在选项api中可以直接调用生命周期钩子

// vue3
<script setup>     
import { onMounted } from 'vue';   // 使用前需引入生命周期钩子
 
onMounted(() => {
  // ...
});
 
// 可将不同的逻辑拆开成多个onMounted,依然按顺序执行,不会被覆盖
onMounted(() => {
  // ...
});
</script>
 
// vue2
<script>     
export default {         
  mounted() {   // 直接调用生命周期钩子            
    // ...         
  },           
}
</script> 

vue2和vue3常用的生命周期表:

注意:setup是围绕beforeCreate和created生命周期钩子运行的,所以不需要显式的去定义

4.多根节点

熟悉 Vue2 的朋友应该清楚,在模板中如果使用多个根节点时会报错,

// vue2中在template里存在多个根节点会报错
<template>
  <header></header>
  <main></main>
  <footer></footer>
</template>
 
// 只能存在一个根节点,需要用一个<div>来包裹着
<template>
  <div>
    <header></header>
    <main></main>
    <footer></footer>
  </div>
</template>

但是,vue3支持多个根节点,也就是frgment,多个节点的写法是被允许的

<template>
  <header></header>
  <main></main>
  <footer></footer>
</template>

5.typeScript支持

vue3由typeScript重写,相对于vue2有更好的typeScript支持

vue2 options API中option是个简单对象,而typeScript是一种类型系统,面向对象的语法,不是特别匹配

vue2需要vue-propety-decorator增加更多结合vue特性的装饰器,写法比较繁琐

6.性能优化

vue3在渲染性能方面进行了许多改进,它引入了虚拟dom的静态提升和片段(Fragment)的支持,减少了渲染所需的额外开销。另外,vue3还对编译器进行了优化,生成了更小,更快的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值