Vue3和Vue2响应式原理对比

Vue3的响应式原理

vue2响应式
  • 对象类型:通过Object.defineProperty()对属性进行读取,修改进行拦截(数据劫持)
  • 数组类型:通过重写更新数组的一系列方法实现拦截
  • 在对象中添加一个属性VUE.set(“给谁添加属性”,“属性名(或者是修改的值的索引)”,“属性值”)this.$set(“给谁添加属性”,“属性名”,“属性值”)
  • 在对象中删除一个属性VUE.delete(“给谁添加属性”,“属性名”,“属性值”)this.$delete((“给谁添加属性”,“属性名”,“属性值”))
  • 在数组中修改某个属性,使用数组的API进行修改,this.xxx.splice(0,1,“xxx”)
    在这里插入图片描述
    在这里插入图片描述
vue3响应式
  • vue3不存在vue2监测不到数据更改的问题

  • 原理:window内置的proxy(“代理对象”,{get(target,propName){return target[propName]},set(target,propName,value){target[propName]=value},deleteProperty(target,propname){delete target[propName]})

  • window.proxy(xxx,{
        get(target,propName)//有人读取xxx的某个属性时调用
        	{return target[propName]},
        set(target,propName,value)//有人修改或者追加某个属性时调用
    		{target[propName]=value}
        deleteProperty(target,propname)//有人删除某个属性时调用
    		{delete target[propName]}
    })
    

在这里插入图片描述

vue使用的:

window.Reflect.get(“目标对象”,“目标”)
window.Reflect.set(“目标对象”,“目标”,“值”)
window.Reflect.deleteProperty(“目标对象”,“目标”)
window.proxy(xxx,{
    get(target,propName)//有人读取xxx的某个属性时调用
    	{return Reflect.get(target,propName)},
    set(target,propName,value)//有人修改或者追加某个属性时调用
		{Reflect.set(target,propName,value)}
    deleteProperty(target,propname)//有人删除某个属性时调用
		{Reflect.deleteProperty(target,propName)}
})

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值