一、回答点
computed计算属性: 依赖其他的值,有缓存, 当它依赖的属性值发生改变,在下次获取computed的值时,才会重新计算computed值,而watch监听器,更多的是起到监听的作用,它没有缓存,每当监听的数据发生了都会执行回调进行后续的操作.
二、深入回答
Computed:
- 支持缓存,当依赖的数据发生变化后,才会重新计算
- 不支持一步操作,当它里面有 异步操作时,无法监听数据的变化
- 计算属性的值 默认会缓存,它是基于响应式依赖进行缓存的,就是 基于data声明过 或者 从父组件传递过来的props中的数据进行金酸
- 如果一个属性是由其他属性计算而来,那么一般会使用计算属性
- 如果 计算属性的属性值是函数,那么默认会使用get 方法,函数的返回值就是属性的属性值,在计算属性中,有get和set方法,当数据发生变化时,会调用set方法
Watch:
- 不支持缓存,当数据发生变化时,他就会触发,之后进行对应的操作
- 它支持异步监听
- 监听的函数会接收两个参数,第一个参数是新值,第二个参数是 旧值
- 当一个属性发生变化时,就会执行对应的操作
- 监听数据必须在data中声明 或这 从父组件传递过来的props中的数据 当发生变化时,会触发对应的操作,函数有两个参数:
● immediate:组件加载会直接触发回调函数
● deep:深度监听,发现数据内部的变化,在复杂数据类型中使用.这里要注意的是 deep无法监听到数组和对象内部的变化.
应用场景:
- 当需要进行计算并依赖其他数据的时候,就使用 计算属性, 因为可以利用 计算属性的缓存特性,避免每次获取值时候都要重新计算.而当它需要执行异步操作时 使用watch.