赞
踩
vue操作一个很有意思的报错
[Vue warn]: You may have an infinite update loop in a component render function.
代码:
<template>
<span class="show-filters" :class="show = !show">
{{ show ? '隐藏过滤器 ↑' :'显示过滤器 ↓' }}
</span>
</template>
<script>
export default {
data() {
return {
show: true
}
}
};
</script>
问题的本质
NOTE: render method is triggered whenever any state changes
即任何时候vue实例状态的改变都会触发渲染方法的执行
show = !show
改变了状态类似同样的报错,还很有可能在v-for指令中产生,如下
<div v-for="item in model.items" v-bind:class="test(item.result)">
{{item.id}}
</div>
vue部分
data() { return { accept: false, not_accept: false, }; }, methods: { test(result) { if (result == 'accept') { this.accept = true; this.not_accept = false; } else if (result == 'Not accept') { this.accept = false; this.not_accept = true; } else { console.log(result); } return { success: this.accept, danger: this.not_accept, }; }, },
对同一依赖响应数据属性在同一实例的生命周期内只作一次变更。
比如:对示例一,将属性绑定改为vue事件绑定,事件是在下一次tick执行渲染
对于示例二,for指令通常只用来读取数据,而非写入响应数据。如需写入数据,无论直接还是间接操作都不要改变响应数据,如下所示:
methods: { test(result) { let accept; if (result == 'accept') { accept = true; } else if (result == 'Not accept') { accept = false; } else { console.log(result); } return { success: accept, danger: !accept, }; }, }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。