当前位置:首页 > React

react父子组件如何调用

2026-03-31 18:44:32React

父组件调用子组件方法

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

父组件示例代码:

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

function ParentComponent() {
  const childRef = useRef(null);

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

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

子组件示例代码:

import { forwardRef, useImperativeHandle } from 'react';

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

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

子组件调用父组件方法

通过 props 传递回调函数给子组件。子组件在需要时调用这个 props 方法。

react父子组件如何调用

父组件示例代码:

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

  return <ChildComponent onParentCall={parentMethod} />;
}

子组件示例代码:

function ChildComponent({ onParentCall }) {
  const handleClick = () => {
    onParentCall();
  };

  return <button onClick={handleClick}>调用父组件方法</button>;
}

使用 Context 跨层级通信

创建 Context 并共享状态和方法,适用于深层嵌套组件。

react父子组件如何调用

Context 示例代码:

import { createContext, useContext } from 'react';

const FamilyContext = createContext();

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

  return (
    <FamilyContext.Provider value={{ sharedMethod }}>
      <ChildComponent />
    </FamilyContext.Provider>
  );
}

function ChildComponent() {
  const { sharedMethod } = useContext(FamilyContext);

  return <button onClick={sharedMethod}>调用共享方法</button>;
}

使用自定义事件通信

通过自定义事件实现完全解耦的组件通信,适用于非父子关系的组件。

事件总线示例代码:

const events = {};

const eventBus = {
  on(event, callback) {
    if (!events[event]) events[event] = [];
    events[event].push(callback);
  },
  emit(event, data) {
    if (events[event]) {
      events[event].forEach(callback => callback(data));
    }
  }
};

// 组件A
eventBus.on('customEvent', data => {
  console.log('收到事件:', data);
});

// 组件B
eventBus.emit('customEvent', { message: 'Hello' });

标签: 父子组件
分享给朋友:

相关文章

uniapp倒计时组件

uniapp倒计时组件

uniapp倒计时组件实现方法 使用内置组件实现 uniapp提供了<countdown>组件用于倒计时功能,支持自定义格式和样式。示例代码如下: <countdown…

vue抽屉组件实现

vue抽屉组件实现

Vue 抽屉组件实现 使用 Element UI 实现 Element UI 提供了现成的抽屉组件 el-drawer,可以快速实现抽屉效果。 安装 Element UI: npm install…

vue实现弹窗组件

vue实现弹窗组件

实现弹窗组件的基本结构 在Vue中创建一个弹窗组件通常需要三个核心部分:组件模板、样式和逻辑控制。弹窗组件应具备打开、关闭功能,并支持内容插槽或属性传入。 <template> &l…

vue 滑杆组件实现

vue 滑杆组件实现

实现基础滑杆组件 使用Vue的v-model和原生<input type="range">实现基础功能: <template> <div> <i…

vue 实现通用组件

vue 实现通用组件

Vue 实现通用组件的方法 封装可复用的组件 将通用功能抽象为独立组件,通过props接收外部数据,通过events与父组件通信。例如封装按钮、输入框、弹窗等基础组件。 使用插槽增强灵活性 通过默认…

vue实现树形组件

vue实现树形组件

实现树形组件的基本思路 在Vue中实现树形组件通常涉及递归组件和动态数据渲染。核心是通过组件自身调用自身,逐层渲染嵌套的节点数据。 定义树形数据结构 树形数据通常是一个包含children属性的对象…