You need to enable JavaScript to run this app. 如何在React函数组件中调用父组件的函数?
优惠活动
大模型
产品
解决方案
定价
更多

如何在React函数组件中调用父组件的函数?

React函数子组件调用父组件传入函数的实现方法

函数组件不存在this指向,不需要通过this访问传入的属性,直接从组件的props参数中获取即可,不同场景的具体用法如下:

父组件传参写法

父组件如果是类组件,你原来的写法可以直接沿用;如果父组件是函数组件,直接传入定义好的函数即可:

// 函数组件父组件示例
const Parent = () => {
  const functionName = () => {
    console.log('父组件函数被触发');
  };
  return <MyChild func={functionName} />;
};

子组件不同场景的调用方式

1. 组件内部直接调用

函数组件的第一个入参就是props对象,直接解构或者通过props.属性名访问即可:

// 子组件写法
const MyChild = ({ func }) => {
  const handleClick = () => {
    func?.(); // 加可选链可以避免未传该属性时报错
  };
  return <button onClick={handleClick}>触发父组件方法</button>;
};

2. 在useEffect中调用

直接把传入的func加入useEffect的依赖数组即可:

const MyChild = ({ func }) => {
  useEffect(() => {
    // 组件挂载时调用一次父组件方法
    func?.();
  }, [func]); // 必须把func加入依赖数组,避免闭包问题
  
  return <div>子组件内容</div>;
};

3. 在useCallback中调用

同样将func加入useCallback的依赖数组即可:

const MyChild = ({ func }) => {
  const memoizedHandle = useCallback(() => {
    func?.();
  }, [func]); // func变化时会自动更新缓存的回调函数

  return <button onClick={memoizedHandle}>触发父组件方法</button>;
};

注意:如果父组件传入的函数没有用useCallback包裹,每次父组件重新渲染都会生成新的函数实例,会导致子组件中依赖func的useEffect、useCallback重复执行。如果需要做性能优化,可以在父组件定义函数时用useCallback包裹,稳定函数引用:

// 父组件优化写法
const functionName = useCallback(() => {
  console.log('父组件方法');
}, [/* 该函数的内部依赖项 */]);

内容的提问来源于stack exchange,提问作者AlwaysQuestioning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 17:54:06