computed和watch
computed
- computed是计算属性,用于多个属性影响一个属性。如:firstname和lastname影响fullname。
- computed拥有缓存数据,且会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data声明过,或者父组件传递过来的props中的数据进行计算的,只有依赖的数据发生了变化才会重新计算。computed中的函数所依赖的数据没有发生变化,那么调用当前的函数的时候会从缓存中读取。
- computed不支持异步。
- 如果属性值是函数,默认使用get方法,那么函数的返回值就是属性的属性值。如果数据发生变化,默认使用set方法,当数据发生变化时调用set方法。
watch
- watch是侦听器,用于一个属性影响多个属性。如:导航栏。
- watch不支持缓存,数据发生变化时,就会触发一个回调函数
- watch是异步的。如:撤销操作中的setTimeOut(()=>{})
- watch有两个属性。immediated(立即触发回调函数)和deep(深度监测)。当第一次渲染时希望监听数据的变化就用immediate=ture,(默认是false);当希望监听复杂数据内部对象的内部数据的变化时用deep=ture.
- vm.$watch用来停止触发回调,返回一个取消观察函数
- watch可以模仿computed的全部功能
总结
- computed是计算属性,是多对一,依赖其他数据,不支持异步。
- watch是侦听器,“观察”的角色,是一对多,数据发生变化就会执行一个回调函数。是异步的,且有两个参数:immideated 和deep 。可以用vm.$watch来取消监听