当前位置: 首页 > news >正文

【Vue3 实战系列·第 02 篇】组件通信:Props·Emit·Provide/Inject·v-model——从父子到跨层级的通信全景

【Vue3 实战系列·第 02 篇】组件通信:Props·Emit·Provide/Inject·v-model——从父子到跨层级的通信全景

系列回顾:第 01 篇我们掌握了组合式 API 的核心——ref/reactive/computed/watch/Composables,从选项式到组合式的思维转换。本篇进入 Vue3 实战的第二个核心话题:组件通信。任何非平凡的 Vue 应用都由多个组件组成,组件之间必须通信——父传子数据、子通知父事件、跨层级共享状态、双向绑定表单值、父组件调用子组件方法。Vue3 提供了丰富的通信方式:Props Down / Events Up是黄金法则——数据从父到子(Props),事件从子到父(Emit),单向数据流保证可追踪性;Provide/Inject跳过中间层——祖先直接给深层后代传数据,不需要逐层转发 Props;v-model / defineModel实现双向绑定——表单控件的标准模式,Vue 3.4 的 defineModel 让代码更简洁;ref + expose让父组件调用子组件方法——命令式调用的场景。选择哪种通信方式?有一个简单的决策树:父子通信用 Props+Emit,双向绑定用 v-model,跨层级用 Provide/Inject,全局状态用 Pinia。今天,我们从 Props/Emit、Provide/Inject 到 v-model/defineModel,彻底掌握 Vue3 组件通信。


📑 文章目录

  • ⬇️ 一、Props 与 Emit:Props Down / Events Up
  • 💉 二、Provide / Inject:跳过中间层
  • 🔗 三、v-model / defineModel / ref+expose:高级通信

⬇️ 一、Props 与 Emit:Props Down / Events Up

1.1 Props:父传子的数据通道

Props 是 Vue 组件通信的基础——父组件通过 Props 向子组件传递数据。子组件必须显式声明它接收哪些 Props,未声明的属性会作为"透传属性"(Fallthrough Attributes)处理。

<!-- 子组件 UserCard.vue --> <script setup lang="ts"> // 泛型方式声明 Props(推荐) const props = defineProps<{ name: string age: number avatar?: string // 可选 role?: 'admin' | 'user' // 联合类型 }>() // 运行时方式声明(带默认值) const props = withDefaults(defineProps<{ name: string age: number avatar?: string }>(), { avatar: '/default-avatar.png', }) </script> <template> <div class="user-card"> <img :src="avatar" :alt="name" /> <h3>{{ name }}</h3> <span>{{ age }}岁</span> </div> </template>
<!-- 父组件 --> <script setup> import UserCard from './UserCard.vue' </script> <template> <UserCard name="张三" :age="25" avatar="/zhangsan.png" /> </template>

Props 的核心原则:单向数据流——子组件不能修改 Props。这是 Vue 最重要 … | 跨层级通信 | Provide/Inject(深层嵌套/主题/配置/权限) |
| 全局状态 | Pinia(下一篇)——多组件共享状态 |

选择原则

能用 Props+Emit 就用 → 需要双向用 v-model → 跨层级用 Provide/Inject → 全局用 Pinia


Vue3 实战系列进度

篇号主题核心内容状态
01组合式APIref/reactive/computed/watch/Composables
02组件通信(本文)props/emit/provide-inject/v-model
03Pinia状态管理Store/Action/持久化/模块化⏳ 下一篇
04Router路由动态路由/守卫/懒加载待写
05性能优化虚拟列表/异步组件/SSR待写
06TypeScript+Vue3类型安全/泛型组件/类型推导待写

一句话总结

Vue3 组件通信三大层次:Props 与 Emit(Props Down / Events Up 黄金法则——数据从父到子Props只读单向数据流保证可追踪/事件从子到父Emit通知父组件修改。defineProps泛型声明+withDefaults默认值/defineEmits泛型声明。常见陷阱=直接修改props/对象引用共享/类型不声明。Props+Emit是默认选择简单可预测易调试)、Provide/Inject(跳过中间层——祖先组件provide数据任意深层后代inject使用无需逐层转发。关键保护=用readonly()包裹provide的值防止后代意外修改。最佳实践=provide响应式数据+readonly+修改方法"数据只读方法可调"。适用场景=深层嵌套组件主题/配置/权限+插件/库不污染props。vs Props逐层传递=代码量固定不变但可追踪性稍弱)、高级通信(v-model组件双向绑定——Props+emit的语法糖:modelValue+@update:modelValue。defineModel Vue 3.4+极简写法一行代码搞定双向绑定支持多个v-model:name/v-model:age。ref+expose父组件调用子组件方法——子组件defineExpose暴露方法/父组件通过template ref获取实例调用。选择决策树=父子通信用Props+Emit→双向绑定用v-model→跨层级用Provide/Inject→全局用Pinia)。


参考链接

  • Vue3 Props
  • Vue3 Component Events
  • Vue3 Provide/Inject
  • Vue3 Component v-model
  • Vue3 defineModel (3.4+)
http://www.jsqmd.com/news/927665/

相关文章:

  • 别再只看容量了!手把手教你读懂电容Datasheet里的ESR、ESL和直流偏压曲线
  • 用C#和MQTTnet在WinForm里做个简易物联网监控后台(附完整源码)
  • 0–8岁英语启蒙书籍推荐(二)
  • InternLM2-7B-chat部署教程:MindSpore环境下的高效推理方案
  • 当AI学会了自己写代码:深入拆解OpenAI Codex CLI的Rust架构设计与工程哲学
  • 大模型多步推理提示工程实战:从思维链到自动化工作流
  • 避开LabVIEW打包陷阱:关于动态VI依赖(以报表工具包为例)的完整配置流程
  • 别再死记硬背了!用购物车和订单系统实战,5分钟搞懂UML类图的6种关系
  • LFM2.5-VL-450M WebGPU实时视频流字幕生成:浏览器端视觉AI应用的完整指南 [特殊字符]
  • 别再死记硬背了!用STM32CubeMX配置GPIO推挽/开漏输出,看完这篇就懂怎么选
  • 原理图改完PCB更新就报错?教你用AD的‘工程变更指令’面板做增量更新和错误隔离
  • OpencvSharp 算子学习教案之 - Cv2.MinEnclosingCircle 重载1
  • Vue项目实战:用vue3-scroll-seamless为数据大屏打造‘会呼吸’的实时滚动列表
  • 宇树Z1机械臂ROS仿真:从Gazebo启动到键盘操控的保姆级避坑指南(ROS Noetic)
  • 告别单调画面!用UE5材质和后期处理Box调出电影级监控摄像头滤镜
  • 用PYNQ和ZYNQ7000玩转实时人脸识别:从笔记本摄像头到开发板LED灯的全流程实战
  • AI如何重塑超市运营:五大核心场景与落地实践
  • 量子计算中的硬件串扰攻击与防御策略
  • 规则引擎与AI系统:从if-else到机器学习的智能决策技术解析
  • PCB设计省钱指南:如何用SI9000仿真帮你选对板材(FR4还是高速料?)
  • 基于AI智能体与知识图谱的个性化烹饪助手:从规划到执行的系统实践
  • CDO、CAIO、CRO:数据、AI与机器人时代的企业新C级领导力
  • PPT怎么转PDF?免费PPT转PDF在线工具与方法2026实测指南
  • 从《我的世界》到《原神》:聊聊Unity材质管理sharedMaterial和material在游戏开发中的那些“潜规则”
  • 双端口构网控制技术在混合交直流系统中的应用
  • DE2-115开发板实战:用Verilog HDL驱动LCD1602显示滚动字符(附完整代码与避坑指南)
  • ADI SigmaStudio+ 2.1安装后别乱点!先找到这个隐藏的‘Target’文件夹(ADSP-21569开发必备)
  • 保姆级教程:用Nvidia-smi命令行参数,给你的GPU做个‘全身体检’
  • 别只盯着成品排程,MRP 算不准库存照样得停产
  • 增强型人类技术:从脑机接口到外骨骼的实践与伦理挑战