Vue的computed与watch的区别
使用普通的methods会得到和computed一样的计算结果,但是不同的是,使用getName方法随着渲染,方法也会被重新调用,而computed不会重新进行计算,从而性能开销比较小。当新的值需要大量计算才能用到的时候,缓存的意义就非常大。如果computed所依赖的数据发生改变时,计算属性才会重新计算,并进行缓存。当改变其他数据时,computed属性并不会重新计算,从而提升性能。
计算属性computed:
- 支持缓存,只有依赖数据发生改变,才会重新进行计算
- 不支持异步,当computed内有异步操作时无效,无法监听数据的变化
- computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值
侦听属性watch:
- 不支持缓存,数据变,直接会触发相应的操作
- watch支持异步;
- 监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;
适用场景
- computed 适⽤于计算⽐较消耗性能的计算场景,watch 监听某个数据的变化(监听完调用什么函数) 一个数据影响多个数据 (比如:浏览器自适应、监控路由对象、监控自身属性变化)
- 当我们要进⾏数值计算,⽽且依赖于其他数据,那么把这个数据设计为computed,computed 计算后返回新 一个数据受多个数据影响(比如:计算总价格、过滤某些数据)
- 如果你需要在某个数据变化时做⼀些事情,使⽤watch来观察这个数据变化