Вы получаете это предупреждение, потому что Vue необходимо повторно выполнить рендеринг для каждого элемента в v-for
l oop, поскольку for l oop обновляет состояние компонента. Мое решение состоит в том, чтобы вычислить результат для каждого элемента массива за один проход в вычисляемом свойстве (в основном это индексный объект) и получить доступ к этому вычисленному свойству в v-for
вместо использования метода checkBuildType
.
new Vue({
el: '#app',
data: {
contents: {
"33": {
"id": 33,
build_name: "email_half",
build_readable: "Email"
},
"34": {
"id": 34,
build_name: "email_simple",
build_readable: "Email"
},
"35": {
"id": 35,
build_name: "email_complex",
build_readable: "Email"
},
"36": {
"id": 36,
build_name: "email_half",
build_readable: "Email"
},
"37": {
"id": 37,
build_name: "email_half",
build_readable: "Email"
}
},
last_build_type: '',
contents_tree: [34, 35, 36, 37, 33]
},
computed: {
buildTypes() {
const buildTypesMap = {};
for (id of this.contents_tree) {
buildTypesMap[id] = this.checkBuildType(id);
}
return buildTypesMap
}
},
methods: {
checkBuildType(id) {
let check = false;
if (this.last_build_type !== this.contents[id].build_name) {
check = true
}
this.last_build_type = this.contents[id].build_name;
return check
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<template v-for="(id, i) in contents_tree">
<div v-bind:key="i + '_' + id" class="inline">
<template v-if="buildTypes[id]">
{{i}} - {{id}} -
{{contents[id].build_readable}}
<br>
</template>
</div>
</template>
</div>