vue中computed和watch有什么区别
前言
在面试中,如果问到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来观察这个数据变化