数据响应式

125 阅读1分钟

1、概念

​数据响应式,可以说是一套能够侦测到数据变化,从而可以根据这个变化做一些跟变化数据相关处理的机制。比如有一个数据

var obj={
    a:3,
    b:6
}

obj.a 值改为5了,我们可以通过数据响应式,做相关obj.a 值更新逻辑处理;删除obj.b 了,做删除逻辑处理等。

2、实现

​现在使用ES6 的 代理 Proxy 和反射 Reflect 简单实现数据的数据响应式

//数据响应式的实现
function reactive(obj){
    return new Proxy(obj,{
        get(target,key){
            let res = Reflect.get(target,key);
            console.log('Proxy.get --> ',key,' --> 侦测到数据被使用')
            return typeof res ==='object' ? reactive(res) : res;
        },
        set(target,key,value){
            let res = Reflect.set(target,key,value);
            console.log('Proxy.set --> ',key,' --> 侦测到数据变化,可以做点什么事情')
            return res;
        },
        deleteProperty(target,key){
            let res = Reflect.deleteProperty(target,key);
            console.log('Proxy.deleteProperty --> ',key,' --> 侦测到数据变化,可以做点什么事情')
            return res;
        }
    })
}

//测试
var obj = reactive({'a':3});
obj.a
obj.a=5
obj.b=6
delete obj.a
obj.c={ d:666};
obj.c.d

控制台打印信息

PS E:\workspace\reactiveDemo> node index
Proxy.get -->  a  --> 侦测到数据被使用
Proxy.set -->  a  --> 侦测到数据变化,可以做点什么事情
Proxy.set -->  b  --> 侦测到数据变化,可以做点什么事情
Proxy.deleteProperty -->  a  --> 侦测到数据变化,可以做点什么事情
Proxy.set -->  c  --> 侦测到数据变化,可以做点什么事情
Proxy.get -->  c  --> 侦测到数据被使用
Proxy.get -->  d  --> 侦测到数据被使用
PS E:\workspace\reactiveDemo>