当前位置:首页 > 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)。
示例代码(通过父组件):

react组件通信实现

// 父组件
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 集中管理状态。
示例代码(简化版):

react组件通信实现

// 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 获取组件实例并调用其方法(类组件适用)。
示例代码:

// 父组件
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实现组件跟随

实现组件跟随的常见方法 使用CSS定位 通过CSS的position: fixed或position: absolute属性实现组件跟随。需要结合JavaScript计算目标元素的位置。 &…

vue组件的实现

vue组件的实现

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

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

vue实现下拉框组件

vue实现下拉框组件

Vue 下拉框组件实现 基础实现 创建基础下拉框组件,使用v-model实现双向数据绑定: <template> <div class="dropdown"> &…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gr…

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…