vue2的深度监听可以改成和Proxy一样get的时候深度监听吗?

来源:6-16 vue3用Proxy 实现响应式

慕粉3858957

2021-03-16

图片描述
vue2的深度监听可以改成和Proxy一样get的时候深度监听吗?如果可以的话为什么不这样做呢?
图片描述

写回答

4回答

双越

2021-03-16

答案是:不可以。

课程里有一个和你一样的问题,你去搜一下,里面有我的回复,也有其他同学的回复,很详细。

1
3
慕婉清8096975
回复
双越
可以考虑如下情况 const obj = {a:{b:{c:10}}} 设置 a.b.c =20 使用defineProperty时,在初始化响应时如果不递归设置setter和getter,是不会触发a.b的getter的,那么响应式就是失效的。 Proxy由于可以触发a.b的getter所以还可以需要的时候再添加响应式
2022-07-10
共3条回复

慕移动8175742

2021-04-13

function observer(target) {
    if (typeof target !== 'object' || target == null) {
        return target;
    }
    
    for (let key in target) {
        let value = target[key];
        
        Object.defineProperty(target, key, {
            get() {
                console.log('[Trigger Get]', key);
                return observer(value);
            },
            set(newV) {
                console.log('[Trigger Set]', newV);
                value = newV;
            }
        });
    }
    return target;
}

var obj = {
    a: {
        b: 1
    }
};

observer(obj);

obj.a = 2;


这样可以吗 ?

0
0

qq_孙延_03214931

2021-04-03

是因为Object.defineProperty实现监听的时候需要for循环而proxy不需要循环 改写后性能反而不好   的原因吗?

0
1
双越
你都使用 for 循环了,那不就是一次性递归完成吗(跟 vue2 目前是一样的)
2021-04-04
共1条回复

msidolphin

2021-03-22

你初始化的时候不去深度监听,后续获取值的时候怎么会进入到getter呢?

0
2
msidolphin
回复
慕粉3871079
我这不是说不能在get时候再监听吗。。。要一次性递归监听完
2021-03-26
共2条回复

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4665 学习 · 1644 问题

查看课程