Vue中computed与事件watch的区别
一、共同点
watch和computed都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某一个或多个数据(称它们为依赖数据)发生变化的时候,所有依赖这些数据的 “相关” 数据 “自动” 发生变化,也就是自动调用相关的函数去实现数据的变动。
二、区别
computed
1、 支持缓存,只有依赖数据发生改变,才会重新进行计算;
2、 不支持异步,当computed内有异步操作时无效,无法监听数据的变化;
3、 computed是计算属性,也就是依赖某个值或者props通过计算得来的数据;
4、 computed的值是在getter执行之后进行缓存的,只有在它依赖的数据发生变化(依赖的数据可以是单个,也可以是多个)时,会重新调用getter来计算;
特点:data中没有直接声明要计算的变量,也可以直接在computed中写入
watch
1、不支持缓存,数据变,直接会触发相应的操作;
2、支持异步操作;
3、watch是监听器,可以监听某一个数据,然后执行相应的操作;
4、监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;
特点:data中没有相应的属性的话,是不能watch的,这点和computed不一样。
三、总结
1.当多个属性影响一个属性的时候,建议用computed
2.当一个值发生变化之后,会引起一系列的操作(改变其他属性值),这种情况就适合用watch
3.如果一个数据需要经过复杂计算就用 computed
4.如果在数据变化时执行异步或开销较大的操作时就用 watch