vue3 watch侦听器填坑详细分析 附加实例
两个小“坑”:
- 监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)。
- 监视reactive定义的响应式数据中某个属性时:deep配置有效。
如果监听reactive所定义的响应式中的某些属性 watch第一个参数要传一个函数 返回值为要监听的对象属性
watch(() => person.age, (nv, ov) => {
console.log('person的age变了', nv, ov);
})
当前求和为:{{ sum }}
当前的信息为:{{ msg }}
姓名:{{ person.name }}
年龄:{{ person.age }}
薪资:{{ person.job.j1.salary }}K
.watchEffect函数
-
watch的套路是:既要指明监视的属性,也要指明监视的回调。
-
watchEffect的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性。
-
watchEffect有点像computed:
- 但computed注重的计算出来的值(回调函数的返回值),所以必须要写返回值。
- 而watchEffect更注重的是过程(回调函数的函数体),所以不用写返回值。
//watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调。 watchEffect(()=>{ const x1 = sum.value const x2 = person.age console.log('watchEffect配置的回调执行了') })//watchEffect //不确定监视对象 //默认开启了immediate:true watchEffect(() => { console.log(`watch effect指定的回调执行了!!`) //依赖收集,你用到了谁它就监视谁!! //这里用到sum, person.job.j1.salary了,所以可以被监视到(只要它们发生变化就重新执行watchEffect) //与computed有点类似,依赖收集.(侧重点不一致,watchEffect注重过程,而computed注重计算函数的返回值) const x1 = sum.value; const x2 = person.job.j1.salary; })