简单示例介绍 vue2 与 vue 3之间 响应式区别

// vue2 响应式的 Object.defineProperties ,数组或对象触发不了set, 可用splice解决
  export default {
  data(){
    return {
        dataA:{},
        dataB:{}
    }
  },
  mounted(){
        this.dataA = {};
        Object.defineProperties( this.dataA, { 
          test: { 
            defaultValue: 1, 
            get: function () {
              return this.defaultValue;
            }, 
            set: function (val) { 
              this.defaultValue = val; 
              console.log("触发了set dataA") 
            }
          } 
        });

        this.dataA.test=[2,3];
        this.dataA.test[0]=1; // 不触发set,没有更新数据
        this.dataA.test.splice(0,1,1)   // 修改了


        // vue3 响应式的 Proxy ,解决了数组或对象触发不了set, 但低版本浏览器有些不兼容
        this.dataB = {
              test:1
        }
        new Proxy(this.dataB, {
            get (target, key, receiver) {
                return Reflect.get(target, key, receiver)
            },
            set (target, key, value, receiver) {
                Reflect.set(target, key, value, receiver)
            }
        })

        this.dataB.test=[2,3];
        this.dataB.test[0]=1;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值