有两种答法,大家自行参考,也可以结合起来。
第一种:
- conputed 能完成的功能, watch 都可以完成
- watch 能完成的功能, computed 不一定能完成。 例如:watch 可以进行异步操作
两个重要的小原则:
- 所有被 Vue 管理的函数,最好写成普通函数,这样 this 的指向才是 vm 或 组件实例对象
- 所有不被 Vue 所管理的函数(定时器的回调函数、ajax的回调函数、promise的回调函数等)最好写成箭头函数,这样 this 的指向才是 vm 或 组件实例对象
- 例子理解:
第二种:
computed值有缓存、触发条件是依赖值发生更改 | watch无缓存支持异步、监听数据变化
computed:
是计算属性,依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值;
watch:
更多的是观察的作用,支持异步,类似于某些数据的监听回调 ,每当监听的数据变化时都会执行回调进行后续操作;
应用场景:
- computed:
需要进行数值计算,并且依赖于其它数据时,应该使用 computed。
因为可以利用 computed 的缓存特性,避免每次获取值时,都要重新计算;
- watch:
需要在数据变化时执行异步或开销较大的操作时,应该使用 watch,使用 watch 选项允许我们执行异步操作 ( 访问一个 API ),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。
这些都是计算属性无法做到的。