vue v-for 在循环中重新渲染一个循环

Posted

技术标签:

【中文标题】vue v-for 在循环中重新渲染一个循环【英文标题】:vue v-for rerender a loop in a loop 【发布时间】:2021-05-15 13:18:42 【问题描述】:

我的 v-for 出现重新渲染问题。 将此组件作为父组件

<category
          v-for="category in categories"
          :key="category.id"
          ref="category"
          :category-data="category"
          :audits-data.sync="audits"
          @delete-category="deleteCategory"
          @update-audits="catched"
/>

下面这个是孩子

<audit
            v-for="audit in audits"
            :key="audit.id"
            ref="audit"
            :audit-data="audit"
            @delete-audit="deleteAudit"
          />

问题是,我使用道具将数据从父母传递给孩子, 在这种情况下,category-data 有一个对象,在下一步中是 audit 循环的数据

如何删除审计中的一个元素,并通过在 v-for 中传递道具来强制类别键重新渲染自己(类别)和孩子(审计)。

我正在使用从audits 触发的发射来触发category 组件内的getCategories() 函数。

问题是,当我删除一个审计时,审计不会响应并重新加载,因为类别仍然相同,因此它不会为审计启动重新渲染链。

如何强制重新渲染 v-for category,即使没有更改类别但仅更新 audits

【问题讨论】:

您应该添加更多代码。文字描述不够…… 我正在制作一个密码箱 key 属性是重新渲染组件的触发器。生成满足您要求的密钥。 【参考方案1】:

我会在子范围内发出删除事件并在父范围内处理相同的事件,从而允许更新主列表。要使数组反映其更改的状态,请重新分配其值(尝试 map -> 过滤器)或将其拼接后进行一些转换。根据我从您的问题陈述中可以推断出的内容,这就是我想提出的建议。我为此制作了一个小应用程序。随意分叉它,希望它有所帮助。

Example application

【讨论】:

【参考方案2】:

正如@ssc-hrep3 所述,更新关键属性将触发底层组件的重新渲染。但是,您的问题似乎与反应性检测问题有关,因此您不应通过强制重新渲染来解决它。 由于您似乎使用嵌套对象和/或数组,您的反应性问题可能与Vue change detection caveats 有关。

然后你应该尝试这样的事情: Vue.set(this.categories, index, updatedAudits)

对于这种复杂的数据嵌套用例,我的建议是首先简化您的模型(例如,在尝试完整的真实案例之前设置 category.audits="test string"),检查它是否正确反应,然后添加一个级别一次复杂

【讨论】:

以上是关于vue v-for 在循环中重新渲染一个循环的主要内容,如果未能解决你的问题,请参考以下文章

Vue:增量渲染 v-for?

Vue方向:v-for循环中的key属性

如何在 Vue.js 的嵌套 v-for 循环中使用 v-html 有条件地渲染原始 HTML?

vue中v-for循环的时候为啥要添加:key属性

vue2循环数组对象,没有的属性会报错,怎么办

React中循环渲染类似Vue中 的v-for