$attrs 奇怪现象:绑定的数据没有变化,但watch触发了??why
// 在子组件card组件中监听
watch: {
'$attrs.info': {
handler(newV, oldV){
console.log("变化了") // 父组件中info明明没有改变,但watch认为它是个新的。
},
deep: true,
immediate: true,
}
}
导致这种情况的原因是:
是父组件的非info数据的变化导致了父组件及其子组件的更新,$attrs 是响应式数据,子组件更新导致
a
t
t
r
s
被
重
新
赋
值
了
,
即
使
监
听
的
i
n
f
o
没
有
变
化
。
因
为
attrs 被重新赋值了,即使监听的info没有变化。因为
attrs被重新赋值了,即使监听的info没有变化。因为attrs变化了,所以watch执行了。
解决方案:
用props接受想监听的值即可。