在Vue开发中,子组件修改父组件数据虽技术上可行,但会破坏单向数据流规范,埋下严重隐患。
可以修改,但官方不推荐、不符合单向数据流规范,且会遗留严重线上BUG。

Vue允许子组件修改父组件Props数据且不会直接报错,但这种操作违反设计规范,会导致后期维护困难,是引发疑难BUG的重要原因。
子组件直接修改基础类型Props会触发控制台报错,Vue会抛出Avoid mutating a prop directly警告,且修改不会生效。
子组件可直接修改引用类型Props且无报错,还能同步更新父组件数据,这是最常见的问题场景。
这是因为对象和数组属于引用类型,父子组件共享内存地址。修改内部属性不会改变引用地址,Vue响应式机制无法检测到变化。
极易引发隐形BUG,看似正常运行,实则违背Vue设计原则,为项目埋下隐患。
子组件通过触发事件通知父组件更新数据,完全符合单向数据流规范。
父组件:
<Child :count="count" @update:count="count = $event" />
子组件:
const props = defineProps(['count'])
const emit = defineEmits(['update:count'])// 修改父数据
const add = () => {
emit('update:count', props.count + 1)
}
Vue3使用v-model简化父子数据同步逻辑,代码更加优雅。
父组件:
count="count" />
子组件:
const props = define<{ count: number }>()
const emit = defineEmits(['update:count'])const change = () => {
emit('update:count', 100)
}
对于复杂场景和多层级组件,建议:
遵循Vue单向数据流规范,采用正确方式修改父组件数据,才能确保项目长期稳定运行。