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

【大前端】React 父子组件通信、子父通信、以及兄弟(同级)组件通信

在 React 中,组件之间的通信是核心问题之一。可以分为三类:父子组件通信子父通信、以及兄弟(同级)组件通信。我给你梳理一下常见方式和对应示例:


一、父子组件通信

父组件通过 props 将数据或方法传递给子组件。

// Parent.tsx
import React, { useState } from "react";
import Child from "./Child";export default function Parent() {const [message, setMessage] = useState("Hello from Parent!");return <Child text={message} />;
}// Child.tsx
import React from "react";export default function Child({ text }: { text: string }) {return <h2>{text}</h2>;
}

👉 这是 React 中最常见的方式,数据单向流动。


二、子父组件通信(回调函数)

子组件通过调用父组件传递下来的 回调函数 来“通知”父组件。

// Parent.tsx
import React, { useState } from "react";
import Child from "./Child";export default function Parent() {const [msgFromChild, setMsgFromChild] = useState("");const handleChildMsg = (msg: string) => {setMsgFromChild(msg);};return (<div><Child onSend={handleChildMsg} /><p>子组件发来的消息: {msgFromChild}</p></div>);
}// Child.tsx
import React from "react";export default function Child({ onSend }: { onSend: (msg: string) => void }) {return (<button onClick={() => onSend("Hello Parent!")}>发送消息给父组件</button>);
}

三、同级组件通信(兄弟组件通信)

兄弟组件无法直接通信,需要通过共同的父组件全局状态管理 来中转。

方式 1:借助共同父组件

// Parent.tsx
import React, { useState } from "react";
import ChildA from "./ChildA";
import ChildB from "./ChildB";export default function Parent() {const [msg, setMsg] = useState("");return (<div><ChildA onSend={setMsg} /><ChildB message={msg} /></div>);
}// ChildA.tsx
import React from "react";export default function ChildA({ onSend }: { onSend: (msg: string) => void }) {return <button onClick={() => onSend("来自 A 的消息")}>发送给B</button>;
}// ChildB.tsx
import React from "react";export default function ChildB({ message }: { message: string }) {return <p>B 收到: {message}</p>;
}

方式 2:使用 Context(跨层级共享数据)

适合较复杂的场景,避免“层层传 props”。

import React, { createContext, useContext, useState } from "react";const MsgContext = createContext<any>(null);export default function Parent() {const [msg, setMsg] = useState("");return (<MsgContext.Provider value={{ msg, setMsg }}><ChildA /><ChildB /></MsgContext.Provider>);
}function ChildA() {const { setMsg } = useContext(MsgContext);return <button onClick={() => setMsg("ChildA 发来消息")}>发消息</button>;
}function ChildB() {const { msg } = useContext(MsgContext);return <p>B 收到: {msg}</p>;
}

方式 3:状态管理库(Redux、Zustand、Recoil)

适合大型项目,状态多、组件复杂时使用。


✅ 总结:

  • 父子通信props
  • 子父通信:回调函数。
  • 同级通信:提升状态到父组件,或者用 Context/全局状态库。

http://www.xdnf.cn/news/1441189.html

相关文章:

  • 【轨物方案】创新驱动、精准运维:轨物科技场站光伏组件缺陷现场检测解决方案深度解析
  • 【QT随笔】事件过滤器(installEventFilter 和 eventFilter 的组合)之生命周期管理详解
  • 卷积神经网络CNN-part2-简单的CNN
  • 深度学习篇---InceptionNet
  • 深度学习——卷积神经网络
  • 服务器搭建日记(十二):创建专用用户通过 Navicat 远程连接 MySQL
  • Mac电脑Tomcat+Java项目中 代码更新但8080端口内容没有更新
  • 最新KeyShot 2025安装包下载及详细安装教程
  • leetcode210.课程表II
  • STM32F103按钮实验
  • Redis基础篇
  • 新后端漏洞(上)- Redis 4.x5.x 未授权访问漏洞
  • COB封装固晶载具/IC芯片固晶载具核心功能与核心要求
  • 《明朝那些事》读书笔记-王阳明:「知行合一」
  • Prometheus 配置主机宕机告警
  • 同城跑腿系统 跑腿小程序app java源码 跑腿软件项目运营
  • 存算一体:重构AI计算的革命性技术(2)
  • “互联网 +”时代商业生态变革:以开源 AI 智能名片链动 2+1 模式 S2B2C 商城小程序为例
  • 小程序点击之数据绑定
  • 深度学习三大框架对比评测:PaddlePaddle、PyTorch 与 TensorFlow
  • 从零开始的python学习——列表
  • OpenCV的阈值处理
  • 华为云Stack Deploy安装(VMware workstation物理部署)
  • LabVIEW信号频谱分析与限测系统
  • 190页经典PPT | 某科技集团数字化转型SAP解决方案
  • 开源 + 免费!谷歌推出 Gemini CLI,Claude Code 的强劲对手
  • Java设计模式之结构型—代理模式
  • leetcode算法刷题的第二十五天
  • Python:AI开发第一语言的全面剖析
  • Springboot3+SpringSecurity6Oauth2+vue3前后端分离认证授权-客户端