VUE3和VUE2的区别

289 阅读1分钟
最近用vue3写了两个项目,一开始很难理解,用法感觉已经是两种框架了,很难用,但后面感觉一把搓的感觉还挺好,现在来总结一下这俩的区别。
  • 生命周期变化 就最开始俩变setup,其他就名字改了下 Vue2.x | Vue3 | | ------------- | --------------- | | beforeCreate | 使用 setup() | | created | 使用 setup() | | beforeMount | onBeforeMount | | mounted | onMounted | | beforeUpdate | onBeforeUpdate | | updated | onUpdated | | beforeDestroy | onBeforeUnmount | | destroyed | onUnmounted | | errorCaptured | onErrorCaptured |
  • 使用proxy代替defineProperty 两者的区别:
  1. defineProperty监听对象属性,Proxy可以直接监听对象而非属性,
  2. Proxy可以直接监听数组的变化,
  3. Proxy有多达13种拦截方法 proxy用途:
  4. 通过拦截set,可以做数据校验;
  5. 通过拦截apply,可以统计函数调用次数;
  6. 通过拦截set、get,可以实现简单断言;
  7. 通过拦截get, 可以实现自定义报错信息;
  8. 通过拦截apply,可以实现普通函数和构造函数的兼容处理;
  9. 通过拦截get,实现隐藏属性;
  • Diff算法的提升
  1. 静态标记,节点发生变化会做一个静态标记,diff时只对比标记的节点
  2. 使用最长递增子序列优化对比流程,可以最大程度的减少 DOM 的移动,达到最少的 DOM 操作
  3. 使用事件缓存
  • 支持typescript
  • 挂载方式区别
  1. vue2.0 是通过new Vue创建实例,通过参数el确定挂载的dom进行挂载;
  2. vue3.0可以通过解构的方式拿到createApp方法,通过该方法得到app调用mount进行挂载
  • 打包体积变化 treeshaking优化
  • compositon Api 所有代码都在setup里写,需要响应的数据用ref和reactive包一下