Closed6
Vue3のpropsとwatch挙動メモ
props: {
obj: {
type: Object,
default: () => ({ val: 1 }),
}
text: {
type: String,
default: '',
}
},
setup(props) {
watch(() => props.obj, (to, from) => {
console.log(to === from)
})
}
こういう状況で、親側はobj
を渡さず、text
を変更するとwatch
が発動する。to === from
はfalse
。
defaultがfactoryから再取得されて、値が変わったと見なされている?
Vue2ではそんな挙動ではなかった気がする。
default: { val: 1 },
と書くと同条件でもwatch
は発動しない。やはりdefaultのfactoryとwatchの組み合わせが何やら怪しい。
今の時代props
をコンポーネント内で変更しようとする開発者はいないのではないか。factory関数使わなくていい気もする。lintで怒られるか。
jsfiddleでそれっぽく状況作っても再現しなかった。
他にも何か条件があるかもしれない。
見つけたのはここのprops
。currentCommand
が変化するとdefault値のまま変化していないはずのoriginalViewBox
のwatch
が発動する。
再現方法分かった。親側からobj
としてundefined
(ref
初期値のままなどで)渡していると再現する。
<child :obj="obj" :text="text" />
obj
を渡していないと再現しない。
<child :text="text" />
issue化。
対応してくれた。done
このスクラップは2021/03/26にクローズされました