You may have an infinite update loop in a component render function.
1. 报错代码<ul><liv-for="(item, i) in rankList":key="item.ID"><sparklineBar:data="item.priceList.reverse()":limit="item.priceList.length"/></li></ul>运行上述代码时,vue报错:You may hav
·
1. 报错代码
<ul>
<li
v-for="item in rankList"
:key="item.ID"
>
<sparklineBar
:data="item.priceList.reverse()"
:limit="item.priceList.length"
/>
</li>
</ul>
运行上述代码时,vue报错:You may have an infinite update loop in a component render function.
2. 解决方法:
此处仅列出一种解决方法,其他方法可以通过下面的报错解析自行实现
<ul>
<li
v-for="item in rankList"
:key="item.ID"
>
<sparklineBar
:data="getPriceList(item.priceList)"
:limit="item.priceList.length"
/>
</li>
</ul>
methods: {
getPriceList(data){
// 此操作防止改变原数据造成vue渲染死循环
let price = JSON.parse(JSON.stringify(data))
return price.reverse();
}
}
3. 报错解析
报错内容翻译为中文即:您可能在组件渲染函数中有一个无限循环的更新
。
因为在 JS数组方法中
reverse
操作会改变原数组(rankList),造成v-for
重新渲染
而 item 每执行一次 reverse 就导致组件重新渲染一次,因此造成无限循环的更新。
所以我们要保证不改变原数据(rankList)的情况下渲染正确的数据:
就需要
getPriceList
方法返回一个新数据
来完成;
方法有很多种,师父领进门,修行靠个人,具体实现还需自己查看教程摸索:
我的个人博客
有空来坐坐
更多推荐
已为社区贡献16条内容
所有评论(0)