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

React组件通信的6种艺术:从单向传值到全局共享

组件间的通信,就像人与人的对话——单向传递是尊重,状态提升是信任,而全局共享则是无需言语的默契。

本文是《从0死磕全栈》系列第6篇,系统梳理 React + TypeScript 开发中六大核心组件通信方式,涵盖父子传值、兄弟通信、跨层级共享、全局状态管理及 Refs 直接操控,助你根据场景精准选择,告别“props 一层层传到秃头”的困境。


一、第一种:父组件向子组件传值(Props)

✅ 适用场景

父组件需要向子组件传递静态或动态数据(如标题、配置、初始值)。

✅ 实现方式

通过 props 单向传递,并使用 TypeScript 接口定义类型,确保安全性和可维护性。

// 父组件
function Parent() {const message: string = "Hello from Parent!";return <Child message={message} />;
}// 子组件 Props 类型定义
interface ChildProps {message: string;
}// 子组件
function Child({ message }: ChildProps) {return <h1>{message}</h1>; // 输出: Hello from Parent!
}

🔍 关键要点

  • 单向数据流:数据只能从父流向子,符合 React 设计哲学。
  • TypeScript 友好:使用 interface 定义 props 类型,编译期校验,避免运行时错误。
  • 可扩展性强:新增属性只需在接口中添加,不影响逻辑。

二、第二种:子组件向父组件传值(回调函数)

✅ 适用场景

子组件触发事件(如按钮点击、表单提交)需通知父组件并传递数据。

✅ 实现方式

父组件传递一个回调函数作为 prop,子组件调用该函数并传参。

// 父组件
function Parent() {const handleChildData = (data: string): void => {console.log("Data from Child:", data); // 输出: Data from Child: Hello from Child!};return <Child onSendData={handleChildData} />;
}// 子组件 Props 类型
interface ChildProps {onSendData: (data: string) => void;
}// 子组件
function Child({ onSendData }: ChildProps) {const sendData = (): void => {onSendData("Hello from Child!");};return <button onClick={sendData}>Send Data</button>;
}

💡 比喻理解

父组件提供了一个“收件箱”(回调函数),子组件把信息“投递”进去,父组件收到后自动处理。


三、第三种:兄弟组件通信(状态提升)

✅ 适用场景

两个同级组件(兄弟)需要共享和同步数据(如 A 显示内容,B 修改内容)。

✅ 实现方式

将共享状态提升到共同父组件,再通过 props 分别传递给子组件。

// 父组件
function Parent() {const [sharedData, setSharedData] = useState<string>("Initial Data");return (<div><SiblingA data={sharedData} /><SiblingB onUpdateData={setSharedData} /></div>);
}// 兄弟组件 A(显示)
interface SiblingAProps {

文章转载自:

http://FsacIH2W.pphbn.cn
http://EAJusEOi.pphbn.cn
http://NYIaWrVy.pphbn.cn
http://fD13X4CA.pphbn.cn
http://lVpLGSVW.pphbn.cn
http://SJk1gaAS.pphbn.cn
http://a2avn16N.pphbn.cn
http://ZCguMk2K.pphbn.cn
http://bjZ3wq4a.pphbn.cn
http://3qFDBJA0.pphbn.cn
http://PHljxUet.pphbn.cn
http://NpFovLGR.pphbn.cn
http://dRwEXkWi.pphbn.cn
http://RECX2NGD.pphbn.cn
http://rSVJD38n.pphbn.cn
http://JtOLlAWQ.pphbn.cn
http://2bOTyPGX.pphbn.cn
http://mkEstS2q.pphbn.cn
http://YPgy6Xl3.pphbn.cn
http://5ObADYdk.pphbn.cn
http://X37eK82P.pphbn.cn
http://jeYlcBHA.pphbn.cn
http://T3yCDBS6.pphbn.cn
http://wbJxX6sV.pphbn.cn
http://iOjT1s2h.pphbn.cn
http://jYnisydX.pphbn.cn
http://64UEBDAD.pphbn.cn
http://QgpUzrYu.pphbn.cn
http://OYUG4mJf.pphbn.cn
http://IqzwZ2CO.pphbn.cn
http://www.dtcms.com/a/383343.html

相关文章:

  • Go 消息队列学习指南
  • 导购类电商平台的服务容错机制:Sentinel在微服务稳定性保障中的应用
  • 基于HTML2WEB和DEEPSEEK实现web设计
  • 网络系统设计方案: eNSP、华为、网络架构设计、小型局域网、DHCP\MSTP\VRRP\VLAN\RIP
  • 视觉 AI 如何优化产品图片分类?
  • Linux《线程(上)》
  • LeetCode 2565.最少得分子序列
  • Petalinux相关配置——ZYNQ通过eMMC启动
  • 2024版 IDEA 用 Maven 创建 java 项目(+Maven 安装和配置)
  • Qt程序单独运行报错问题
  • Qt读写ini文件的方式对比和Demo示例
  • xtuoj 连分式
  • 使用B210在Linux下实时处理ETC专用短程通信数据(5)-业余软件无线电户外经验
  • 机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
  • XLua教程之C#调用Lua
  • IDEA版本控制管理之使用Gitee
  • 贪心算法应用:航班起降问题详解
  • 【Linux】CentOS7安装教程
  • Java面试问题记录(四)
  • 制造业 “AI+” 转型案例:智能质检、预测性维护如何降本提效 30%?
  • 视频全模态referring分割:Ref-AVS: Refer and Segment Objects in Audio-Visual Scenes
  • 高数基础知识(下)②
  • 【人工智能通识专栏】第十五讲:视频生成
  • [硬件电路-206]:绝缘体、导体、半导体
  • 算法日记---二分查找
  • Pandas模块
  • 在Unity2021中使用Profiler的Deep Profile功能时内存超高怎么办?
  • GooseDB,一款实现服务器客户端模式的DuckDB
  • openEuler部署Samba服务器:实现跨平台文件共享
  • 认知语义学的象似性原理对人工智能自然语言处理深层语义分析的影响与启示