Vue2和Vue3的区别

1. 响应式原理

vue2采用的是Object.defineProperty为每个属性创建getter和setter,通过getter和setter来捕获数据的。

但缺点是无法监听数组或对象新增和删除的数据。办法就是使用watch进行监听。

vue3是通过Proxy来进行数据劫持的,并且可以监听数组或对象新增、删除的数据。

那什么是数据劫持呢?

数据劫持,就是数据代理

是指在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或返回修改结果。

例如使用Object.defineProperty方法来定义对象属性的访问器(getter,setter),或者使用Proxy对象来创建一个对象的代理,从而拦截和自定义基本操作。

了解Object.defineProperty()方法

主要传三个参数

Object.defineProperty(obj,prop,descriptor):

obj: 定义属性的对象

prop:定义或修改属性的名称

descriptor:定义或修改的属性描述符

属性描述符数据描述符存取描述符。两者描述符只能存在一个,不能同时存在。

​    数据描述符:configurable,enumerable,value,writable

​    存取描述符:configurable,enumerable,get,set

​    get与value功能相同,set与writable功能相同

2. 生命周期

vue3和vue2的生命周期其实没什么区别,vue3在vue2的基础上在钩子前面加了“on”。

vue3没有created和beforeCreate钩子,被setup替代了,但可以直接使用。

vue2的beforeDestroy和destroyed钩子,vue3替换成onBeforeUnmount和onUnmounted钩子。

vue2和vue3的生命周期
vue2vue3
beforeCreatesetup组件开始创建数据实例之前
createdsetup组件实例创建完成
beforeMountonBeforeMountDOM挂载之前
mountedonMountedDOM挂载完成
beforeUpdateonBeforeUpdate组件更新之前
updatedonUpdated组件更新之后
beforeDestroyonBeforeUnmount组件销毁之前
destroyedonUnmounted组件销毁之后

vue3使用钩子的时候需要先引入才能使用,vue2可以直接使用

<script setup>
    //vue3
    //需要引入
    import { onMounted } from 'vue'
    onMounted(()=>{
        
    })
    //还可以写多个
    onMounted(()=>{
        
    })
</script>

<script>
	//vue2
    export default{
        //直接使用
        mounted(){
            
        }
    }
</script>

3. vue3支持碎片化

vue2的根节点只能有一个,vue3可以有多个根节点。

4. Composition API

vue2为选项式api,需要各种选项,例如data,methods等。

vue3为组合式api,允许相关的代码逻辑放在一堆,方便管理。

<script>
//vue2
    export default {
        data(){
            return {
                id:""
            }
        },
        methods:{
            func1(){
                
            },
            func2(){
                
            }
        }
    }
</script>

<script setup>
    //vue3
const id = ""
const func1 = ()=>{
    
}
</script>

5. TypeScript支持

vue3相比于vue2是有更好的TypeScript支持的,vue3由TypeScript重写。

6. 去掉this

vue2访问数据或者方法的时候需要使用this.xx的方式,而vue3可以直接访问,不用this。

7. 构建项目方式

vue2使用webpack的方式构建项目

vue3使用vite的方式构建项目

8. 语法糖

vue3新增了语法糖setup,使用setup后可不用export default导出,也不用return。

所有 ES 模块导出都被认为是暴露给上下文的值。

9. 模块指令

vue2的指令优先级是v-for优于v-if

vue3改变了指令的优先级,v-if优于v-for。好处是避免了无效的dom操作和潜在的性能问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值