当前位置:首页 > React

react如何实现父子方法调用

2026-03-11 10:42:26React

父组件调用子组件方法

通过 useRefforwardRef 结合暴露子组件方法。在子组件中使用 useImperativeHandle 定义可被父组件调用的方法。

父组件示例代码:

import { useRef } from 'react';
import Child from './Child';

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

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

  return (
    <div>
      <button onClick={handleClick}>调用子组件方法</button>
      <Child ref={childRef} />
    </div>
  );
}

子组件示例代码:

import { forwardRef, useImperativeHandle } from 'react';

const Child = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    childMethod: () => {
      console.log('子组件方法被调用');
    }
  }));

  return <div>子组件</div>;
});

子组件调用父组件方法

通过 props 将父组件的方法传递给子组件,子组件直接调用接收到的函数属性。

父组件示例代码:

function Parent() {
  const parentMethod = () => {
    console.log('父组件方法被调用');
  };

  return <Child onCallParent={parentMethod} />;
}

子组件示例代码:

function Child({ onCallParent }) {
  return (
    <button onClick={onCallParent}>
      调用父组件方法
    </button>
  );
}

使用 Context 跨层级调用

对于深层嵌套组件,可以使用 React Context 传递方法。

创建 Context:

const MethodContext = createContext();

function App() {
  const sharedMethod = () => {
    console.log('共享方法被调用');
  };

  return (
    <MethodContext.Provider value={sharedMethod}>
      <Parent />
    </MethodContext.Provider>
  );
}

子组件调用:

function DeepChild() {
  const contextMethod = useContext(MethodContext);

  return (
    <button onClick={contextMethod}>
      调用上下文方法
    </button>
  );
}

事件总线模式

通过自定义事件系统实现任意组件间通信,适合复杂场景。

创建事件总线:

const EventBus = {
  listeners: {},
  emit(event, ...args) {
    this.listeners[event]?.forEach(cb => cb(...args));
  },
  on(event, callback) {
    if (!this.listeners[event]) this.listeners[event] = [];
    this.listeners[event].push(callback);
  }
};

父组件监听:

useEffect(() => {
  EventBus.on('childEvent', (data) => {
    console.log('收到子组件事件', data);
  });
}, []);

子组件触发:

react如何实现父子方法调用

const triggerEvent = () => {
  EventBus.emit('childEvent', { value: 123 });
};

分享给朋友:

相关文章

权限管理vue如何实现

权限管理vue如何实现

基于路由的权限控制 在Vue中可以通过路由守卫实现页面级权限控制。定义路由时添加meta字段标记权限角色: const routes = [ { path: '/admin',…

vue如何实现增删

vue如何实现增删

使用 Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是具体实现方法: 数据定义与初始化 在 Vue 组件的 data 选项中定义数组来存储需要操作的数据项…

vue项目如何实现

vue项目如何实现

安装Vue.js 通过npm或yarn安装Vue.js。确保Node.js环境已配置完成。 npm install vue # 或 yarn add vue 创建Vue项目 使用Vue CLI工具快…

h5如何实现蜡烛点亮

h5如何实现蜡烛点亮

实现蜡烛点亮的H5方法 在H5中实现蜡烛点亮效果,可以通过CSS动画、Canvas绘图或结合JavaScript交互来实现。以下是几种常见的方法: 使用CSS动画和JavaScript 通过…

react如何实现菜单

react如何实现菜单

使用 React 实现菜单的方法 使用状态管理控制菜单显示/隐藏 通过 useState 管理菜单的展开和收起状态,结合点击事件切换状态。 import { useState } from 'rea…

vue如何实现标签

vue如何实现标签

实现动态标签页 在Vue中可以通过<component :is="currentTab">动态切换组件,结合v-for渲染标签页头部。典型结构包含标签页容器和内容区域: <temp…