一:首先,什么情况下使用watch?
(1)当我们需要实时监听一个值的变化,这个值的变化会对其他的值产生影响,或者这个值的变化会改变一些业务逻辑。
(2)不同于computed,watch监听的值不会依赖于其他的值,或者说它自己本身就是被依赖的值
(3)watch监听的值需要提前定义,而computed不需要
二:什么情况下使用深度监听:
当你需要监听一个对象内部属性的变化,并且这个对象可能是嵌套的,这时候就需要使用深度监听。也就是说对象的属性下面如果还有嵌套属性,就需要深度监听。
基本使用:
三、在vue2中使用watch普通监听:监听的函数接收两个参数,第一个参数是最新的值newValue;第二个参数是输入之前的值newValue;
watch: {
// 默认情况下我们的监听器只会针对监听的数据本身的改变(内部发生的改变是不能监听)
info: {
handler: function(newInfo, oldInfo) {
console.log("newValue:", newInfo.nba.name, "oldValue:", oldInfo.nba.name);
},
deep: true, // 深度监听
immediate: true // 立即执行
}
}
当只需要对对象内部的某个属性进行深度监听时:
data(){
return {
}
}
//对user下面的count属性进行深度监听
user.contact对象内部的属性发生变化时,handler函数会被触发,并输出新的值。设置deep: true允许你深度监听嵌套对象的变化。四、vue3使用watch普通监听:watch本身就是一个函数,第一个参数是监听的对象
const message=ref('请求成功')
watch(message,(newValue,oldValue)=>{
console.log(newValue,oldValue)
})
vue3使用watch深度监听:
const obj=reactive({
'name':'博客园',
‘age’:{
'num':10
}
})
监听obj中age的变化:
watch( () => obj.age, (newVal, oldVal) => { // 做点什么 } )
或者也可以age下面的num属性的变化:
watch( () => obj.age.num, (newVal, oldVal) => { // 做点什么 } )
五、vue3中数组监听:
watch(([p1,p2],(newValue,oldValue))=>{
})
六、vue3中watchEffect的使用:
watchEffect类似于一个生命周期函数,在打开页面的时候默认加载,等同于vue2中的immediate,监听的值发生变化的时候也会执行。
浙公网安备 33010602011771号