You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中Ref重新赋值新对象实例后是否会失去响应性?

执行resetA函数后变量a的属性失去响应性是否正常?

初始时在setup函数中通过如下方式初始化属性:

.....
setup(){
    let a = ref(new o());
    .......
}
........

之后通过如下函数对变量a进行重新赋值:

const resetA = () => {
    a.value = new o()
}

执行该函数后,变量a的属性失去了响应性,这种情况是否正常?

补充信息
类o的定义如下:

class o{
    j;
    k;
    l;
    public constructor() {
        j = '';
        k = '';
        l = '';
    }
}

这种情况不正常,问题根源在类o的构造函数里——你没有用this指向类的实例,导致j、k、l变成了全局变量,根本不是实例自身的属性。

第一次创建实例时,a.value指向的对象就没有自己的j/k/l属性;调用resetA重新赋值新实例后,情况也一样。ref虽然能追踪value的引用变化,但实例本身没有可被响应式追踪的属性,自然就会出现“失去响应性”的表现。

只需要在构造函数里给属性加上this就能修复:

class o{
    j;
    k;
    l;
    public constructor() {
        this.j = '';
        this.k = '';
        this.l = '';
    }
}

修改后,每个类实例都会拥有自己的j、k、l属性,ref就能正常追踪这些属性的变化,执行resetA后也不会再出现响应性丢失的问题。

内容的提问来源于stack exchange,提问作者Chin. Udara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:45:01