在 Vue3.2 中,使用 watch
监听通过 props 传递的 tableData
数组时失效。
deep
或 immediate
选项watch(
() => props.tableData,
(newVal, oldVal) => {
console.log('tableData changed', newVal)
},
{ deep: true }
)
watch(
() => props.tableData.length,
(newLen, oldLen) => {
console.log('Array length changed', newLen)
}
)
import { toRefs, computed } from 'vue'
const { tableData } = toRefs(props)
const tableDataRef = computed(() => tableData.value)
watch(tableDataRef, (newVal) => {
console.log('tableData changed', newVal)
}, { deep: true })
// 子组件
const emit = defineEmits(['update-table'])
watch(
() => props.tableData,
() => {
emit('update-table')
},
{ deep: true }
)
// 父组件
<ChildComponent @update-table="handleTableUpdate" />
ref
包装数组时,需要通过 .value
访问希望这些解决方案能帮助你解决 watch 监听 props.tableData 失效的问题。