当前位置:首页 > React

react组件通信实现

2026-01-27 09:47:06React

React 组件通信方法

父组件向子组件传递数据
通过 props 传递数据,子组件通过 this.props(类组件)或直接解构(函数组件)接收。
示例代码:

// 父组件
<ChildComponent message="Hello from parent" />

// 子组件(函数式)
function ChildComponent({ message }) {
  return <div>{message}</div>;
}

子组件向父组件传递数据
父组件通过 props 传递回调函数,子组件调用该函数并传递数据。
示例代码:

// 父组件
function ParentComponent() {
  const handleData = (data) => console.log(data);
  return <ChildComponent onData={handleData} />;
}

// 子组件
function ChildComponent({ onData }) {
  return <button onClick={() => onData("Child data")}>Send</button>;
}

兄弟组件通信
通过共同的父组件作为中介,或使用状态管理工具(如 Redux、Context API)。
示例代码(通过父组件):

// 父组件
function Parent() {
  const [data, setData] = useState("");
  return (
    <>
      <SiblingA onData={setData} />
      <SiblingB data={data} />
    </>
  );
}

跨层级组件通信(Context API)
使用 React.createContext 创建上下文,通过 ProviderConsumer(或 useContext)共享数据。
示例代码:

const MyContext = React.createContext();

// 提供者
function App() {
  return (
    <MyContext.Provider value="Global data">
      <Child />
    </MyContext.Provider>
  );
}

// 消费者(函数组件)
function Child() {
  const value = useContext(MyContext);
  return <div>{value}</div>;
}

全局状态管理(Redux)
适用于复杂应用,通过 storereduceraction 集中管理状态。
示例代码(简化版):

// store 配置
const store = createStore(reducer);

// 组件中获取数据
import { useSelector } from "react-redux";
function Component() {
  const data = useSelector(state => state.data);
  return <div>{data}</div>;
}

事件总线(Event Emitter)
通过自定义事件发布/订阅模式实现通信(较少使用,可能破坏 React 数据流)。
示例代码:

import EventEmitter from "events";
const eventBus = new EventEmitter();

// 发布事件
eventBus.emit("event", data);

// 订阅事件
eventBus.on("event", (data) => console.log(data));

Ref 直接访问组件
通过 ref 获取组件实例并调用其方法(类组件适用)。
示例代码:

react组件通信实现

// 父组件
class Parent extends React.Component {
  childRef = React.createRef();
  handleClick = () => this.childRef.current.doSomething();
  render() {
    return <Child ref={this.childRef} />;
  }
}

// 子组件(类组件)
class Child extends React.Component {
  doSomething() { console.log("Called"); }
  render() { return <div>Child</div>; }
}

方法选择建议

  • 简单父子通信:props 和回调函数。
  • 跨层级或全局状态:Context APIRedux
  • 避免过度使用 ref 和事件总线,优先遵循 React 单向数据流。

标签: 组件通信
分享给朋友:

相关文章

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,主要包括单文件组件(SFC)、全局注册和局部注册。以下是常见的实现方法: 单文件组件(SFC) 单文件组件是 Vue 最推荐的组件化开发方式…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…

vue实现串口通信

vue实现串口通信

vue实现串口通信的方法 Vue本身不直接支持串口通信,但可以通过浏览器API或第三方库实现。以下是几种常见方法: 使用Web Serial API Web Serial API是现代浏览器提供的原…

vue实现组件刷新

vue实现组件刷新

强制重新渲染组件 使用 this.$forceUpdate() 方法可以强制 Vue 实例重新渲染,但不会更新子组件。适用于依赖非响应式数据的情况。 methods: { refreshComp…

vue实现布局组件

vue实现布局组件

Vue 实现布局组件的方法 基础布局组件结构 使用 Vue 的单文件组件(SFC)创建一个基础布局组件。布局组件通常包含头部、侧边栏、主体内容和页脚。 <template> <…

vue实现轮播组件

vue实现轮播组件

使用Swiper实现轮播组件 Swiper是一个流行的开源轮播库,支持Vue集成。安装Swiper和Vue相关依赖: npm install swiper vue-awesome-swiper 引入…