vue3.0响应式实现

vue3使用proxy实现响应式

function reactive(target = {}) {
    if (type target !== 'object' || target === null) {
        return target
    }

    const proxyConf = {
        get: function (target, key, receiver) {
            const result = Reflect.get(target, key, receiver)
            // 深度监听,对于深层的对象
            return reactive(result)
        },
        set: function (target, key, val, receiver)) {
             const result = Reflect.set(target, key, val, receiver)
            return result
        },
        deleteProperty: function (target, key) {
             const result = Reflect.deleteProperty(target, key)
            return result
        }
    }
    const observed = new Proxy(target, proxyConf)
    return  observed
}


const data = {
    name: "张三" ,
    age: "34",
    info: {
        city: "北京"
    }
}

优点:

深度监听,性能更好(调用才会深度监听)

可监听新增和删除的属性

可监听数组变化

缺点:

Proxy能规避Object.defineProperty但是无法兼容所以浏览器,无法Polyfill

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值