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
相关产品推荐
相关产品推荐

