ale*_*lex 2 javascript vue.js vuejs2
我正在创建具有排序功能的基本表:
<template>
<!-- more code -->
<tr v-for="item in sortBy(data.body, { name: 'name', order: 1 })">
<td v-for="field in item">{{ field }}</td>
</tr>
<!-- data.body => [{ name: Group 1 }, { name: Group2 }, // etc.] -->
</template>
props: {
data: {
type: Object,
default () {
return {}
}
}
},
methods: {
sortBy (data, params) {
// the warning disappears if I only leave "return data"
data.sort((a, b) => {
return a[params.name] - b[params.name] * params.order
})
return data
}
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我收到此警告:
[Vue警告]:组件渲染函数中可能有无限的更新循环。
这是为什么以及如何解决?
小智 6
之所以收到警告,是因为您正在更改sortBy中的data.body值。此数据更改将导致渲染功能再次运行。您没有得到无限循环的原因是,在第二次调用sortBy时,数据已被排序,这不会导致data.body发生数据更改。
解决方案就是Jaromanda X提到的。使用slice将复制数组,这意味着data.body的值不会更改,因此不会调用任何重新渲染。
return data.slice().sort(....
Run Code Online (Sandbox Code Playgroud)