我有一个v-for
包含一个组件的列表。在组件内部,我根据属性的值显示 a<div>
或 a 。<input>
问题是当我更改属性值时,v-for 中的所有项目都会更新,而不仅仅是更改的组件。这不是小型应用程序的问题,但我注意到在处理较大的数据集时性能显着下降。
所以基本问题是:
当仅更新一个组件时,如何避免渲染所有组件?
我把它全部放在一个JSFiddle here中。请注意,当您单击按钮以显示 C 组件输入时,所有组件都会重新呈现(显示在控制台中),而不仅仅是 C 组件。
HTML
<div id="app">
<button @click="showinput = 'C'">
Show C input
</button>
<br>
<br>
<div v-for="item in list" :key="item.id">
<list-item :item=item :showinput="showinput"></list-item>
</div>
</div>
<template id="list-item"> <span> <div v-if="showinput !== item.name">
{{item.name}}</div>
<input v-else
type="text"
v-model.lazy="item.name" >
</span>
</template>
JS
Vue.component('list-item', {
template: '#list-item',
props: ['item', 'showinput'],
data () {
return {
}},
beforeUpdate() {
console.log("Updating " + this.item.name)
}
});
// create a new Vue instance and mount it to our div element above with the id of app
var vm = new Vue({
el: '#app',
data: {
list: [{name: "A", id: 1}, {name: "B", id: 2}, {name: "C", id: 3},],
showinput: "X"
}
});