记录一次vue3.0学习笔记

522 阅读3分钟

首先,我们先了解在vue2.0使用过程中遇到哪些难题

  1. vue2.0对typeScript的支持是有限的。
  2. vue2.0中mixins(按功能模块提取出来)
    • 作用:它可以将可重用的代码封装起来,在需要用到的页面中引入就可以将组件内部如data、method等与父组件中相应内容进行合并,相当于扩充了父组件。
    • 缺点:不利于维护、命名冲突、不清楚暴露出来的变量的作用。

vue3.0做了哪些重要的改进

  • 打包大小减少41%
  • 初次渲染快55%,更新快133%
  • 内存使用减少54%
  1. 完全支持typescript
  2. 性能的提升(重写了diff算法、tree-shaking的优化)
    • 重写虚拟dom(新增了静态标记(PatchFlag),只比对带有PF的节点,跳过了静态(常量)节点,只处理动态(模板)节点,从而很大程度的提升了性能)
    • 提升网络加载性能:tree-shaking机制(原理:依赖es6的模块化语法,将无用的代码进行剔除)
  3. composition API(把一个功能的所有状态、方法、都封装到一个函数里面,方便统一管理)

vue2.0和vue3.0的一些区别

  1. 响应式原理的改变,使用proxy取代了object.defineproperty(proxy可以之间监测到对象和数组的变化)
    • vue2通过object.defineproperty来完成数据的劫持,但考虑到性能,没有对数组的每一项进行劫持,而是用AOP切片思想对数组的7个方法(push,shift,pop,splice,unshift,sort,reverse)进行重写,所以改变数组的索引和长度是监测不到的。
    • vue3是利用ES6中的proxy代理实现,在访问对象之前设置一层拦截,对整个对象进行代理(可以是任何类型的对象,包括原生数组、函数,或者是另一个代理)
  2. 调整了v-if v-for的优先级,调整后v-if优先级大于v-for.
  3. v-model语法糖弃用,改用modelValue
  4. vue3.0允许template设置key值
  5. 弃用全局api new Vue,使用createApp
  6. 弃用Vue.prototype,使用
const app = Vue.createApp({})
app.config.globalProperties.$http = () => {}
  1. 移除事件api,$on、$off、$once、$eventBus

vue3.0部分api

  1. setup()方法 setup函数是compoditionAPI的入口函数,通过return暴露出setup中定义的变量和方法。
    • ref 可以声明简单类型的变量并转化成响应式。

      Image.png

    • reactive 声明复杂类型的变量并转化成响应式。

    • toRefs 可以将setup函数中直接return出复杂类型的值变成响应式的。

      image.png 2.生命周期函数
      可以在setup函数中处理生命周期函数,因为beforeCreate、created和setup执行时间几乎相同,所以要处理的东西可以写在setup函数中。

  beforeCreate -> use setup()
  created -> use setup()
  beforeMount -> onBeforeMount
  mounted -> onMounted
  beforeUpdate -> onBeforeUpdate
  updated -> onUpdated
  beforeDestory -> onBeforeUnmount
  destroyed -> onUnmounted
  activated -> onActivated
  deactivated -> onDeactivated
  errorCaptured -> onErrorCaptured
  
  // 调试用的debugger函数(记录了当render时,哪些值发生了变化)
  onRenderTracked
  onRenderTriggered

3.侦听器watch

接受三个参数:参数1:监听的数据源 (可以为一个ref或者一个函数) 参数2:回调函数 (newValue, oldValue) => {} 参数3:深度监听或立即执行的配置(deep: true, imediate: true)

image.png
4.计算属性computed
当一个值需要通过计算来得到时就可以使用计算属性,和vue2中使用一样,回调函数必须要有return,不支持异步,可以使用set、get方法,可以直接读取或修改。总的来说,计算属性变化不大。





好了,今天先到这里 bey~~