注意了!Vue3中使用watch竟然还有这样一个坑!【Vue3】
刀_奶_:
估计和reactive实现机制有关,这个ref和reactive给我一种java“包装类”的感觉,不同在于一个是添加新成员,一个是将数据响应式。
以后我感觉会出现修饰器去完成ref()和reactive()方法的调用。
比如:
@reactive
let a,b,c;
这种形式的
我的心态已经彻底崩了:
watch(toRefs(numbers).a,(newA,oldA)=>{
console.log(newA," ->",oldA)
})
【回复】如果是复杂的多层对象,怎么监听。搞不懂 比如:{a:{aa:1}}
ー条死魚:
对象怎么监听?如果是单层{a:1}的话watch(toRefs(numbers).a,(newA,oldA)={---})就可以了
如果是多层{a:{a:1}}这种怎么监听完整的呀
【回复】好家伙,原来是这样
watch(() => 【str1.a.aa,str1.b.bb】, (【a,b】, 【aa,bb】) => {
// console.log('newV:', newVa, ';oldV:', oldVa);
console.log(a,'-',aa,'--',b,'--',bb)
});
ー条死魚:
watch(toRefs(numbers).a,(newA,oldA)={
console.log(newA, -,oldA)
})
tp,cy
ppy_2020:
对于{}这样的对象,如果想对其进行完整侦听,你需要借助一个计算属性,然后对它进行侦听,当然也是需要尝试侦听。然后:这种中间性质的不需要return暴露出去
const copyNumbers = computed(() => Object.assign({}, numbers));
watch(() => copyNumbers.value, (curr, last) => {
console.log('numbers.a==>', curr.a, last.a)
}, { deep: true })
示例中因为对象层级为1,所以直接使用的是Object.assign进行拷贝,如果层级深度>1,需要使用深拷贝
【回复】对其单个指定的“值类型”属性进行侦听,是可以直接进行的。比如:numbers.a,也不需要深度侦听模式
【回复】如果层级深度大于1,需要使用深拷贝……大于号不知道是没选出来,还是给吃了……
【回复】打错字,不是尝试侦听,是深度侦听……