第一点:
computed支持缓存,只有当依赖数据发生改变时,才会重新计算;
watch不支持缓存,数据变化的时候直接触发相应的操作;
第二点:
computed不支持异步,无法监听数据的变化
watch支持异步,可以监听数据变化;
第三点:
computed属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存,也就是基于data声明的数据或者父组件通过props传递的数据通过计算得到的值;
watch监听的函数接收两个参数,第一个是最新的值,第二个是输入之前的值;
第四点:
如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed;单个属性发生变化时,需要执行相应操作;一对多一般使用watch.
第五点:
如果computed属性的属性值是函数,默认会走get方法;函数的返回值就是属性的属性值;在computed种的属性都有属于自己的get和set方法;当数据发生变化时,调用set方法。而watch监听数据必须是data声明的或父组件传递过来的props中的数据,数据变化是触发其他操作,函数有两个参数。
相同:
都是以vue的依赖追踪机制为基础,都试图处理比如:当某个数据发生变化的时候,所有依赖这个数据的相关数据都发生变化,也就是自动调用相关函数去实现数据的变动。
题外:
只有符合:1.存在依赖型数据 2.依赖型数据发生改变这两个条件,computed才会重新计算。
适用场景:
watch擅长处理的场景:一个数据影响多个数据
computed擅长处理的场景:一个数据受多个数据影响