先说下computed属性和methods区别
-
computed
是响应式的,methods
并非响应式。 - 调用方式不一样,
computed
定义的成员像属性一样访问,methods
定义的成员必须以函数形式调用。 -
computed
是带缓存的,只有其引用的响应式属性发生改变时才会重新计算,而methods
里的函数在每次调用时都要执行。 -
computed
中的成员可以只定义一个函数作为只读属性,也可以定义get/set
变成可读写属性,这点是methods
中的成员做不到的。
比如:我们想去时刻监控数据的变化,在视图上显示不同的结果,当然这两中方法都可以实现这种效果,这个时候用computed就比较合理了,因为computed是可缓存的,只要数据层值不改变,computed就不会去改变,而且可缓存,如果数据层的值变了,computed就会实时更新到视图层上,所以说computed是响应式的。
computed属性和watch区别
- computed里属性名是自定义的,它可以监听一个或多个它所依赖的数据项;而watch一次只能监听一个属性,这个属性函数接收两个参数,一个是新值一个是旧值。
- computed里自定义的属性不能与data里的属性重复,否则会报错;而watch里监听的属性必须是已存在的,其要么是data里的属性,要么是computed里计算出来的属性。
- watch是允许异步操作的(访问一个API),并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。
我们在不知道用什么时,基本上用computed是没什么问题的。