【发布时间】:2020-03-16 13:54:15
【问题描述】:
我有一个看起来像这样的数组:
customers : [ {customer : 'foo', address : {postalCode : 6655, city : 'somewhere'}}, ..
]
我呈现一个类似这样的列表:
<template v-for="(cust, inx) in customers">
<div>{{ customers[inx].customer }}</div>
<div>{{customers[inx].address.postalCode }}|{{ customers[inx].address.city}}</div>
</template>
现在我有一个函数,当人们输入一个新的邮政编码时,它会获取一个城市并将其设置为:
this.$set(self.customers[inx].address, 'city', 'NewCityName');
问题是,我可以确认文本实际上是在正确的对象中更改的,但它不会触发重新渲染。 在这种情况下,我是否以错误的方式使用了 $set 函数?
【问题讨论】:
-
如果
city属性已经存在于相关对象中,那么使用$set与直接使用self.customers[inx].address.city = 'NewCityName'设置它没有什么不同。根据您提供的代码,我认为它应该会触发重新渲染,因此您可能需要将minimal reproducible example 放在一起,以便我们自己看到问题。如果city属性最初丢失并且在其他地方没有$set填充,那么这可能会解释发生了什么。与您的问题无关,但在您的模板中,您继续写customers[inx],而您可以写cust。 -
您还应该添加
:key="inx",否则会导致重新渲染问题。你为什么要使用this和self?或者找出哪些属性不是响应式控制台记录对象并检查哪些属性没有 getter/setter。
标签: vue.js vue-reactivity