You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React向props传递函数,组件内调用时报props.prop1不是函数怎么解决

错误原因

你两次调用Test组件传入的props不匹配:

  • 第一次调用<Test prop1={() => {return "a"}}/>时,仅传入了prop1,没有传入prop2
  • 第二次调用<Test prop2="b"/>时,仅传入了prop2,没有传入prop1

而Test组件内部默认每次渲染都会执行props.prop1(),当第二次渲染组件时,prop1的值为undefined,调用undefined自然会抛出props.prop1 is not a function的错误。

解决方案

你可以根据业务需求选择以下任意一种方案修复:

  • 方案1:使用可选链调用可选props,避免未传props时的调用报错
    调用prop1前先判断它是否存在,用可选链语法?.即可实现,不需要额外写条件判断:
// 修改后的Test组件核心代码
function Test(props) {
  return (
    <>
      <div className="test">
        <div>Test data {props.prop1?.()} </div>
        {/* prop2也可以加空值合并运算符兜底未传的情况 */}
        <div>{props.prop2 ?? ''}</div>
      </div>
    </>
  );
}
  • 方案2:给Test组件设置默认props兜底
    如果要保证props无论是否传入都有合法值,可以给组件配置默认props:
// 在Test.js文件末尾导出前添加以下代码
Test.defaultProps = {
  // prop1默认是返回空字符串的函数
  prop1: () => '',
  // prop2默认是空字符串
  prop2: ''
}
  • 方案3:保证每次调用Test组件时都传入完整的必填props
    如果你的业务逻辑要求prop1和prop2都是必填项,那每次调用Test时都要把两个参数传齐:
// 修改App.js内的Test调用逻辑
<Test prop1={() => {return "a"}} prop2="第一次自定义内容"/>
<Test prop1={() => {return "其他返回值"}} prop2="b"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:39:00