Vue里methods和computed的易死循环的错误操作
粉丝福利 : 关注VUE中文社区公众号,回复视频领取粉丝福利
本人才刚接触vue几天,在写demo试手的时候发现了两个容易造成死循环的错误操作,而官方文档对此细节描述的不多,也没看到什么人说,就分享下。
1、调用表达式绑定和属性绑定 先上代码:
<div>{{test()}}</div>
data:{
a:0,
},
methods:{
test:function(){
this.a++;
return this.a++;
}
}
这个大家应该都踩过,实际就是数据绑定时若采用表达式,每次dom更新的时候,绑定的表达式都会重新执行。从而造成test()→属性a变化→dom更新→执行test()→…从而造成死循环。 2、compute里触发事件 一样先上代码:
<div id="test" > test:{{test}} </div>
var vm = new Vue({
el:'#test',
data:{
a:0,
b:0,
},
created:function () {
this.$on('change',this.add)
},
computed:{
test:function () {
this.$emit('change');
console.log('计算属性执行');
return this.a;
}
},
methods:{
add:function () {
this.b++;
}
}
})
在浏览器控制台输入 ‘vm.b++’,你会惊奇的发现 ‘计算属性执行’也被打印出来了,说明test()方法居然和属性b关联在一起了,发现的时候我都惊了。 大家知道Vue子组件是通过事件同父元素通信,若你在计算属性computed里触发事件,多个组件之间非常容易触发死循环(我就不说我花了整整半天才找到原因)。
通过上面的例子,感觉vue实质上应该有个规范,computed、methods、watch等应该进行哪些操作,不该执行哪些操作。不然很容易踩坑 以上便是我个人分享,毕竟才接触vue几天,若有不对的地方,欢迎大家指出。