当前位置:首页 > React

react如何完成组件通信

2026-01-25 10:46:35React

父子组件通信

父组件通过props向子组件传递数据。子组件通过调用父组件传递的回调函数与父组件通信。

// 父组件
function Parent() {
  const [data, setData] = useState('initial data');

  const handleChildClick = (newData) => {
    setData(newData);
  };

  return <Child data={data} onClick={handleChildClick} />;
}

// 子组件
function Child({ data, onClick }) {
  return (
    <button onClick={() => onClick('updated data')}>
      {data}
    </button>
  );
}

子父组件通信

子组件通过调用父组件传递的回调函数将数据传递回父组件。父组件可以更新自己的状态或执行其他操作。

兄弟组件通信

通过将共享状态提升到最近的共同父组件中实现兄弟组件间的通信。父组件管理状态并通过props分发给各个子组件。

react如何完成组件通信

function Parent() {
  const [sharedState, setSharedState] = useState('');

  return (
    <>
      <SiblingA 
        state={sharedState} 
        setState={setSharedState} 
      />
      <SiblingB 
        state={sharedState} 
        setState={setSharedState} 
      />
    </>
  );
}

Context API

对于跨多级组件的数据共享,使用Context API避免props层层传递。创建Context后,Provider提供数据,Consumer或useContext钩子消费数据。

const MyContext = createContext();

function App() {
  return (
    <MyContext.Provider value="shared value">
      <ComponentA />
    </MyContext.Provider>
  );
}

function ComponentA() {
  const value = useContext(MyContext);
  return <div>{value}</div>;
}

状态管理库

对于复杂应用状态管理,可使用Redux、MobX等库。这些库提供集中式状态存储和可预测的状态更新机制。

react如何完成组件通信

// Redux示例
const store = createStore(reducer);

function Component() {
  const state = useSelector(state => state.value);
  const dispatch = useDispatch();

  return (
    <button onClick={() => dispatch({ type: 'INCREMENT' })}>
      {state}
    </button>
  );
}

事件总线/发布订阅

创建全局事件系统,组件通过订阅和发布事件进行通信。适用于松散耦合的组件间通信。

const EventBus = new EventEmitter();

function ComponentA() {
  useEffect(() => {
    EventBus.emit('event', 'data');
  }, []);
}

function ComponentB() {
  const [data, setData] = useState('');

  useEffect(() => {
    EventBus.on('event', setData);
    return () => EventBus.off('event', setData);
  }, []);

  return <div>{data}</div>;
}

Refs与实例方法

通过ref获取组件实例并调用其方法。适用于需要直接访问子组件的情况。

function Parent() {
  const childRef = useRef();

  const handleClick = () => {
    childRef.current.doSomething();
  };

  return (
    <>
      <Child ref={childRef} />
      <button onClick={handleClick}>Call Child Method</button>
    </>
  );
}

const Child = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    doSomething: () => console.log('Child method called')
  }));

  return <div>Child Component</div>;
});

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

相关文章

vue实现广告组件

vue实现广告组件

Vue 实现广告组件的核心方法 数据驱动的广告内容渲染 通过 props 接收广告数据(如图片URL、跳转链接等),使用 v-bind 动态绑定属性。典型结构包含 <a> 标签嵌套 <…

vue实现倒计时组件

vue实现倒计时组件

Vue 倒计时组件实现 核心思路 通过 setInterval 或 setTimeout 实现时间递减,结合 Vue 的响应式数据更新 UI。需注意组件销毁时清除定时器。 基础实现方案 模板部分…

vue组件实现

vue组件实现

Vue 组件实现 Vue 组件是 Vue.js 的核心特性之一,允许开发者将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种常见方式: 单文件组件(SFC) 单文件组件是 Vue…

react如何开发组件

react如何开发组件

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

uniapp组件

uniapp组件

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

uniapp组件写法

uniapp组件写法

Uniapp 组件的基本写法 Uniapp 的组件写法与 Vue 类似,支持单文件组件(.vue 文件)。一个基本的组件通常包含三个部分:<template>、<script>…