VUE3和VUE2的区别
最近用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
两者的区别:
- defineProperty监听对象属性,Proxy可以直接监听对象而非属性,
- Proxy可以直接监听数组的变化,
- Proxy有多达13种拦截方法
proxy用途:
- 通过拦截set,可以做数据校验;
- 通过拦截apply,可以统计函数调用次数;
- 通过拦截set、get,可以实现简单断言;
- 通过拦截get, 可以实现自定义报错信息;
- 通过拦截apply,可以实现普通函数和构造函数的兼容处理;
- 通过拦截get,实现隐藏属性;
- 静态标记,节点发生变化会做一个静态标记,diff时只对比标记的节点
- 使用最长递增子序列优化对比流程,可以最大程度的减少 DOM 的移动,达到最少的 DOM 操作
- 使用事件缓存
- vue2.0 是通过new Vue创建实例,通过参数el确定挂载的dom进行挂载;
- vue3.0可以通过解构的方式拿到createApp方法,通过该方法得到app调用mount进行挂载
- 打包体积变化
treeshaking优化
- compositon Api
所有代码都在setup里写,需要响应的数据用ref和reactive包一下