0%

watch和computed区别

computed和watch的区别:

1 computed能完成的功能watch也能完成,computed支持缓存

2 watch能完成的功能computed不一定能完成,例如watch能完成异步操作

PS:

1 所有被Vue管理的函数要写成普通函数,这样new Vue的实例的时候this才能绑定到新创建的vm或组件实例对象

2 所有不被Vue管理的函数比如(定时器的回调函数,ajax的回调函数和Promise的回调函数)最好写成箭头函数,箭头函数的this绑定会继承外层函数的this绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Vue.createApp({
data(){
return {
firstName:"张",
lastName:"三",
fullName:"张三"

}

}
watch:{
firstName(val){
setTimeout(()=>{
this.fullName=val+this.lastName},1000)
},
lastName(val){
setTimeout(()=>{
this.fullName=thia.firstName+val},1000)

}
}
})

总结:

watch和computed都是以Vue的依赖追踪机制为基础,当某一个依赖型数据(简单理解为放在data等对象下的实例数据)发生变化,所有依赖这个数据的相关数据会自动发生变化,即自动调用相关函数,来实现数据的变动

使用场景:

computed:用于处理复杂的逻辑运算,一个数据首一个或多个数据影响,用来处理watch和methods无法处理或者处理起来不方便的情况,例如处理模板中的复杂表达式

watch:用来处理一个属性变化时,需要执行某些具体的业务操作逻辑,或要在数据变化时执行异步或开销较大的操作;例如用来监控路由,input输入值的特殊处理等