zl程序教程

您现在的位置是:首页 >  前端

当前栏目

vue3中手写shallowReactive, shallowRef(系列十三)

Vue3 系列 手写 十三
2023-09-11 14:20:08 时间
function shallowRef(val) {
    return shallowReactive({value:val});
}

function shallowReactive(obj) {
    return new Proxy(obj, {
        get(obj, key){
            return obj[key];
        },
        set(obj, key, val){
            obj[key] = val;
            console.log('更新UI界面');
            return true;
        }
    })
}
let obj = {
    a:'a',
    gf:{
        b:'b',
        f:{
            c:'c',
            s:{
                d:'d'
            }
        }
    }
};
/*
let state = shallowReactive(obj);

//只有最外层的a属性变化,才会触发视图更新
// state.a = '1';
state.gf.b = '2';
state.gf.f.c = '3';
state.gf.f.s.d = '4';
 */
let state = shallowRef(obj);

// state.value.a = '1';
// state.value.gf.b = '2';
// state.value.gf.f.c = '3';
// state.value.gf.f.s.d = '4';
// ref的最外层属性value,只有它改变,视图才会跟新
state.value = {
    a:1,
    gf:{
        b:2,
        f:{
            c:3,
            s:{
                d:4
            }
        }
    }
}