当前位置:首页 > React

react组件如何通讯

2026-03-30 18:35:48React

组件通讯方式

父组件向子组件传递数据
通过props传递数据,子组件通过this.props(类组件)或函数参数(函数组件)接收。父组件更新props会触发子组件重新渲染。

子组件向父组件传递数据
父组件通过props传递回调函数给子组件,子组件调用该函数并传入参数。父组件在回调中处理子组件的数据。

兄弟组件通讯
通过共同的父组件作为中介,子组件A通过父组件回调更新状态,状态通过props传递给子组件B。

跨层级通讯

Context API
使用React.createContext创建上下文,Provider提供数据,子组件通过ConsumeruseContext钩子消费数据。适合跨多层级组件共享状态。

状态管理库(Redux/MobX)
集中管理全局状态,组件通过connectuseSelector获取状态,通过dispatchaction更新状态。适合复杂应用的状态共享。

事件总线模式

自定义事件系统
利用EventEmitterPubSub库实现发布订阅模式,组件通过事件名监听和触发事件。灵活性高但需注意事件命名冲突。

代码示例

父传子

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

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

子传父

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

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

Context API

react组件如何通讯

const ThemeContext = React.createContext();

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

function Toolbar() {
  return <Button />;
}

function Button() {
  const theme = useContext(ThemeContext);
  return <button className={theme}>Click</button>;
}

选择建议

  • 简单父子通讯优先使用props和回调。
  • 跨层级或多组件共享状态使用Context或状态管理库。
  • 事件总线适合解耦非直接关联的组件,但需谨慎维护。

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

相关文章

vue组件传值实现分页

vue组件传值实现分页

Vue组件传值实现分页的方法 在Vue中实现分页功能,通常需要父子组件之间的数据传递。以下是几种常见的传值方式: 使用props传递数据 父组件通过props向子组件传递当前页码和总页数等分页信息:…

vue实现下拉刷新组件

vue实现下拉刷新组件

Vue 下拉刷新组件实现 核心思路 通过监听 touch 事件计算滑动距离,结合 CSS 过渡动画实现下拉效果,触发刷新回调。 基础实现步骤 监听 touch 事件 在组件 mounted 阶段绑定…

uniapp如何将底部导航组件化

uniapp如何将底部导航组件化

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

vue实现组件通信

vue实现组件通信

Vue 组件通信方法 Vue 提供了多种方式实现组件间的通信,适用于不同场景。以下是常见的方法: Props 和 Events 父组件通过 props 向子组件传递数据,子组件通过 $emit 触…

vue 实现table组件

vue 实现table组件

Vue 实现 Table 组件 基础表格结构 使用 Vue 的模板语法构建表格的基本框架,通过 v-for 动态渲染数据。 <template> <table>…

vue实现拖拽组件

vue实现拖拽组件

Vue 实现拖拽组件的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…