首页 > 解决方案 > 更改特定索引而不在 Vuejs 中重新渲染整个数组

问题描述

Vuejs项目中,我的数据对象中有一个数组,并使用指令将其呈现在视图中。现在,如果我更改该数组中的特定索引,Vue 会在视图中重新渲染整个数组。有没有办法在不重新渲染整个数组的情况下查看视图的变化?v-for


这个问题背后的原因是我的数组处理或做某事的其他索引,当整个数组重新呈现在视图中时,这些进程就会停止。

标签: vue.jsvuejs2v-for

解决方案


在 Vue 1.x 中,我们必须track-by="$index"跟踪渲染数组中更改的索引。但是从 2.x 版本开始,Vue 建议在我们使用intead:key渲染数组时使用。但考虑一下这个打击示例:v-fortrack-by="$index"

<template>

<div v-for="(doc, i) in docs" :key="i">
 <h4>{{ doc.status }}</h4>
 <button @click="reject(i)"> Reject </button>
</div>

<script>

data: {
 docs: [
  { status: 'pending' },
  { status: 'pending' },
  { status: 'pending' }
 ]
},

methods: {
 reject(index) {
  this.docs[index] = { status: 'rejected' }
 }
}

在这个例子中,当我们改变一个索引时,虽然数组改变了,但是我们在视图中看不到任何改变。那是因为我们的组件之前渲染过,我们需要更新它的视图。为此,我们需要this.$forceUpdate()在我们的方法中使用来更新组件。

reject(index) {
 this.docs[index] = { status: 'rejected' }
 this.$forceUpdate();
}

推荐阅读