VUE3对比VUE2改动知识点(区别)

vue2和vue3 对应的文件

vue2vuex2vue-router3element-uivant2
vue3vuex3vue-router4element-ui-plusvant3

VUE2 和VUE3的区别:

Performance:(优化)

  • 重写了虚拟DOM的实现(跳过静态节点,只处理动态节点)<DIFF算法>
  • update性能提高1.3~2倍
  • SSR速度提高了2~3倍(服务端)

Tree shaking

  • 可以将无用模块“剪辑”,仅打包需要的(打包体积更小)

Fragment<空标签> 

  • 不再限于模板中的单个根节点(vue2中的template中只能有一个根节点,vue3允许每一个组件template有多个根节点,相当于把多出来的那一个层级用空标签表示,不显示,同时允许多个根节点)

 <Teleport>

  • 以前称为<Portal> ,译作传送门(使用Teleport标签:把当前组件中的某一部分抽离,出来单独放到另一个容器中<非#app的容器>  基于to的属性)

<Suspense>异步测试组件

  • 可在嵌套层级中等待嵌套的异步依赖项   

 

<template>
  获取用户的信息是:<br />
  用户编号:{{id}}<br />
  用户姓名:{{name}}<br />
</template>
<script>
const query = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({ id: 1, name: "hahaha" });
    }, 2000);
  })
};
export default {
  name: "AsyncTest",
  async setup () {
    let { id, name } = await query()
    return {
      id, name,
    }
  }
}
</script>

<template>
  <h2>你好世界</h2>
  <Suspense>
    <template #default>
      <async-test></async-test>
    </template>
    <template #fallback>
      loading.....
    </template>
  </Suspense>
</template>

<script>
import AsyncTest from './AsyncTest.vue'
export default {
  components: { AsyncTest },
  name: "App",
};
</script>

TypeScript

  • 更好的TypeScript支持(TypeScript 可以称之为  预编译的 JS,基于TS语法写代码,最后编译为JS,TypeScript 相当于 JS来讲  最大的好处:严谨。TS一般用于 @1 开源级类库、插件、组件的开发,@2 大型项目 多人协作开发)

 Custom Renderer API

  • 自定义渲染器API

  • 用户可以尝试WebGL自定义渲染器

 Composition API<函数式API  组合式API>

  • 组合式API,替换原有的 Options [ˈɒpʃnz] API

    • 根据逻辑相关性组织代码,提高可读性和可维护性

    • 更好的重用逻辑代码(避免mixins混入时命名冲突的问题)

  • 但是依然可以延用 Options  API

 Proxy<vue3中的数据劫持>  :响应式原理不再基于 Object.defineProperty
Proxy - JavaScript | MDN

vue2是基于0bject.defineProperty实现数据劫持的(get/set)

  • 需要给对象中的每一个属性分别遍历做劫持「对于后期新增的属性是没有做劫持的, vue2中可以基于$set实现新增属性的劫持」 
  • 对于数组中的每一项没有做劫持「vue2中重写了数组7个方法,后期通过这7个方法修改数组中的某一项,才会让视图重新渲染」 
  • 默认劫持是"浅"的, vue2自动基于递归的方式实现了深度劫持 
  • ES5的API,兼容IE9及以上 +ES5的API,兼容IE9及以上>

vue3中的响应式数据,是基于ES6中的Proxy实现的 定义性质是基于实现数据劫持的(GET/Set)vue 3中的响应式数据,是基于ES6中的代理实现的

  • ES6的API、不兼容IE
  •  Proxy除了提供get/set监听器之外,还提供了其它大量的监听函数,当我们操作对象的时候,可以做到全方位劫持监听
  • Proxy无需自己依次遍历对象的每个属性,只需要代理整个对象,则所有属性都做代理了[哪怕是后期自己新增的属性也会做代理,后期更改也会通知视图重新渲染]
  • Proxy对数组的处理也很友好,vue3中直接对数组每一项做代理,后期我们操作数组每一项,也会触发视图更新,没必要重写7个方法
  •  Proxy默认也只是对对象中第一层做代理,而vuz3中基于递归的方式,也实现了深层次代理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值