当前位置:首页 > 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中,组件刷新通常指重新渲染组件或重置组件状态。以下是几种常见的实现方式: 使用v-if控制渲染 通过v-if指令可以销毁并重新创建组件: <template>…

uniapp如何将底部导航组件化

uniapp如何将底部导航组件化

在 uniapp 中将底部导航组件化 将底部导航组件化可以提高代码复用性和维护性。以下是具体实现方法: 创建自定义底部导航组件 新建一个组件文件,例如 tab-bar.vue,放置在 compon…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父组件…

vue组件实现vmodel

vue组件实现vmodel

Vue 组件实现 v-model 在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 p…

vue实现布局组件

vue实现布局组件

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

vue布局组件实现

vue布局组件实现

Vue 布局组件实现方法 基础布局组件设计 使用 Vue 的单文件组件(SFC)创建一个基础的布局组件框架,通常包含<header>、<main>、<footer>…