父子通信:props 向下,emit 向上,v-model 是糖

父给子传数据用 props(单向、只读);子要改父的数据用 emit 发事件让父自己改。 v-model 只是「:modelValue + @update:modelValue」的语法糖。 开发版会校验 props 类型/必填/emit 载荷并把警告打进迷你控制台,生产构建全部静默——别拿它当测试。

速查:props / emit / v-model 对应关系

写法(父 → 子 / 子 → 父)本质说明
<child :size="n">props 向下子组件 props: { size: Number } 里只读接收
ctx.emit('like', 7) + 父 @like="…"emit 向上子发事件带载荷,父监听并改自己的数据
<child v-model="x">= :modelValue="x" + @update:modelValue="v => x = v"单个双向绑定
<child v-model:price="p">= :price="p" + @update:price一个组件上多个 v-model
defineModel()Vue 3.4+ 简写SFC 里一行搞定 props+emit,免手写

单向数据流三原则:① props 只读,子组件永远不改 props;② 要改父数据 → emit 让父改;③ 想在本地基于 props 加工 → computed 派生,别拷一份到 ref 里(会失去同步)。

[迷你控制台] Vue 开发版的 props / emit 校验警告会同时显示在这里和浏览器控制台