面试问到:vue中computed和watch有什么区别,怎么回答

196 阅读2分钟

vue中computed和watch有什么区别

145f6429bc89c50.jpg

前言

在面试中,如果问到vue相关的问题,computed和watch的区别是一个很常见的问题。这篇文章就谈谈我对这两者的区别的理解。

computed 和 watch 的定义

  • computed计算属性,根据所依赖的数据动态的显示新的计算结果。并且,计算的结果会被缓存,只有所依赖的值发生改变的时候才会重新求值。每一个计算属性都包括getter和setter,读取时触发getter,修改时触发setter,计算属性内部做了数据劫持。

  • watch是一个监听动作,对数据中Vue实例上的数据变化。如果监听的数据发生变化,就会调用其回调函数并传入newVal,oldVal两个值,并且支持异步操作。

相同之处和区别

  • watch和computed,都可以监听一个数据,在数据变化时进行相关操作。

  • 区别:computed主要用于对同步数据的处理,watch则主要用于观测某个值的变化去完成一段开销较大的复杂业务逻辑

watch的其他属性

deep属性:代表是否开启深度监听,默认为false

Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,才能让它是响应式的。 deep属性的意思是深度遍历,会在对象一层层往下遍历,在每一层都加上监听器

immediate属性和handler方法

immediate:true代表如果在 wacth 里声明了 方法 之后,就会立即先去执行里面的handler方法,如果为 false就跟我们以前的效果一样,不会在绑定的时候就执行。

总结

1.如果一个数据依赖于其他数据,那么把这个数据设计为computed的  

2.如果你需要在某个数据变化时做一些事情,使用watch来观察这个数据变化