当前位置:首页 > 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组件是Vue.js的核心概念之一,用于构建可复用的UI模块。以下是Vue组件的几种常见实现方式: 单文件组件(SFC) 使用.vue文件格式,将模板、脚本和样式封装在…

vue 实现toast组件

vue 实现toast组件

实现 Vue Toast 组件的方法 创建基础 Toast 组件 在 Vue 项目中创建一个基础 Toast 组件,通常包含消息内容和显示控制逻辑。 <template> &…

vue实现盖章组件

vue实现盖章组件

实现Vue盖章组件的步骤 组件结构设计 创建一个Vue组件,包含画布元素和必要的控制按钮。画布用于显示盖章效果,按钮用于触发盖章操作。组件需要接收图片和盖章位置等参数。 <template&g…

react如何引入组件

react如何引入组件

引入组件的常见方法 直接导入组件文件 通过import语句从指定路径引入组件文件,适用于项目内自定义组件。假设组件文件位于./components/Button.js: import Button…

react如何刷新组件

react如何刷新组件

刷新 React 组件的常见方法 使用状态更新触发重新渲染 通过修改组件的状态(state),React 会自动触发重新渲染。例如: const [count, setCount] = useSta…

vue实现路由组件

vue实现路由组件

Vue 实现路由组件的方法 在 Vue 中实现路由功能通常需要结合 Vue Router 库,以下是具体实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router…