在 Vue3 中,使用 ref 数组进行父子组件通信时可能会遇到监听失效的问题,这主要有以下几个原因:
响应式丢失问题:
arrayRef.value[0] = newValue
)ref 数组的特殊性:
Ref<Array>
类型.value
属性才能获取到实际数组引用类型监听限制:
// 正确做法 - 使用响应式方法
const arrayRef = ref([]);
// 添加元素
arrayRef.value.push(newItem);
// 修改元素
arrayRef.value.splice(index, 1, newValue);
const state = reactive({
items: []
});
// 这样修改可以被监听到
state.items[0] = newValue;
import { triggerRef } from 'vue';
// 修改后手动触发更新
arrayRef.value = [...arrayRef.value];
// 或者
triggerRef(arrayRef);
watch(
arrayRef,
(newVal) => {
console.log('数组变化', newVal);
},
{ deep: true }
);
理解 Vue3 响应式系统的这些特性,可以避免在父子组件通信时遇到 ref 数组监听失效的问题。