当前位置:首页 > React

react 子组件如何通信

2026-03-10 18:16:34React

子组件向父组件通信

子组件通过调用父组件传递的回调函数实现通信。父组件将函数作为prop传递给子组件,子组件在特定事件触发时调用该函数。

// 父组件
function Parent() {
  const handleChildEvent = (data) => {
    console.log('Received from child:', data);
  };

  return <Child onEvent={handleChildEvent} />;
}

// 子组件
function Child({ onEvent }) {
  const sendData = () => {
    onEvent('Hello from child');
  };

  return <button onClick={sendData}>Send Data</button>;
}

兄弟组件间通信

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

function Parent() {
  const [sharedData, setSharedData] = useState('');

  return (
    <>
      <ChildA onUpdate={setSharedData} />
      <ChildB data={sharedData} />
    </>
  );
}

function ChildA({ onUpdate }) {
  return <button onClick={() => onUpdate('Updated')}>Update</button>;
}

function ChildB({ data }) {
  return <div>Received: {data}</div>;
}

Context API跨层级通信

创建Context提供全局数据,避免多层prop drilling。Provider组件包裹需要访问数据的组件树,Consumer组件获取数据。

const DataContext = createContext();

function App() {
  const [value, setValue] = useState('default');

  return (
    <DataContext.Provider value={{ value, setValue }}>
      <IntermediateComponent />
    </DataContext.Provider>
  );
}

function Child() {
  const { value, setValue } = useContext(DataContext);

  return (
    <button onClick={() => setValue('new value')}>
      Current: {value}
    </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>;
}

Redux状态管理

通过集中式store管理应用状态,组件通过dispatch actions和selectors与store交互。适用于大型应用复杂状态管理。

react 子组件如何通信

// store.js
const store = configureStore({
  reducer: {
    data: dataReducer
  }
});

// component.js
function Component() {
  const data = useSelector(state => state.data);
  const dispatch = useDispatch();

  const updateData = () => {
    dispatch(updateAction('new value'));
  };

  return <button onClick={updateData}>{data}</button>;
}

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

相关文章

vue怎么实现组件缓存

vue怎么实现组件缓存

vue实现组件缓存的方法 在Vue中实现组件缓存可以通过内置的<keep-alive>组件完成,该组件能够缓存不活动的组件实例,避免重复渲染。 使用<keep-alive>基…

vue轮播组件实现

vue轮播组件实现

vue轮播组件实现方法 使用第三方库(如Swiper) 安装Swiper库: npm install swiper 在Vue组件中引入: <template> <div cl…

vue实现折叠组件

vue实现折叠组件

实现折叠组件的基本思路 在Vue中实现折叠组件通常需要利用动态绑定和条件渲染。核心是通过控制一个布尔值状态来决定内容是否显示,并添加过渡动画提升用户体验。 基础实现方法 使用v-show或v-if控…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模板…

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent…

vue 实现弹窗组件

vue 实现弹窗组件

Vue 弹窗组件实现 基础弹窗组件结构 创建一个名为Modal.vue的文件,定义弹窗的基础结构和样式: <template> <div class="modal-mask"…