Vue中computed和watch的区别

109 阅读1分钟

1. computed

computed 是计算属性,它会根据你所依赖的数据动态显示新的计算结果。

如果依赖的属性没有变化,就不会重新计算。

getter/setter默认不会做缓存,Vue中做了特殊处理,如果依赖的数据不变,computed的值就不会重新计算。

推荐:如果数据要通过复杂逻辑来得出结果,那么就推荐使用计算属性

2. watch

watch是监听,键是 data 对应的数据,值是对应的回调函数。值也可以是方法名,或者包含选项的对象,当 data 的数据发生变化时,就会发生一个回调,他有两个参数,一个 val (修改后的 data 数据),一个 oldVal(原来的 data 数据)。

watch里面有两个选项:

deep:控制是否要看这个对象里面的属性变化。

immediate:控制是否在第一次渲染时执行这个函数。

watch的语法:

1: function(value, oldValue){},
2:(){},
3[f1, f2],
4: 'methodName',
5: {handler:fn, deep:true, immediate:true},
'object.a': function(){}
}

6:vm.$watch('xxx', fn, {deep: .., immediate: ..}//'xxx'可以改为一个返回字符串的函数

注意:使用watch时,不要使用箭头函数来定义,因为箭头函数没有this,它的 this 会继承它的父级函数,但是它的父级函数是 window,导致箭头函数的 this 指向 window,而不是 Vue 实例。

3. 总结

  • 如果一个数据需要经过复杂计算就用 computed

  • 如果一个数据需要被监听并且对数据做一些操作就用 watch