在 Vue3 中,想要监听子组件的 props 变化需要将其先转换为 Ref 类型的值才可以监听。虽然 props 可能是由父组件传递过来的响应式数据,但 props 不是一个响应式的数据。
如下所示:
const props = defineProps({
strHtml: {
type: String,
required: true
},
config: {
type: Object,
required: false
}
});
const toRefStrHtml = toRef(props, "strHtml");
watch(toRefStrHtml, () => {
// ......
})
只有这样,watch
才可以监听到这个 prop 的变化。如果使用 onUpdated
可能会因为任何一个数据改变而执行,watch
函数可以精准的捕捉到哪一个变化,因为它是单一的嘛。
toRef
这个函数我在这个博文中也有一些思考:Vue reactive 解构赋值丢失响应式,toRef 维持响应式。这也是 toRef
函数的一个用处之一。