注意了!Vue3中使用watch竟然还有这样一个坑!【Vue3】

作者: 前端小野2分类: 野生技能协会 发布时间: 2020-09-24 08:41:31 浏览:3508 次

注意了!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,需要使用深拷贝……大于号不知道是没选出来,还是给吃了……
【回复】打错字,不是尝试侦听,是深度侦听……

奇妙知识大赏 编程 JS JAVASCRIPT 经验分享 WEB VUE WEB前端 九月打卡挑战W4

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!