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

React组件函数Prop传递报错:func不被识别为函数求助

解决React组件Prop传递中func不是函数的报错

可能原因及修复步骤

1. 修正username的Prop类型错误

你的Contact.propTypes中把username定义为PropTypes.object.isRequired,但实际传递的是字符串类型的用户名(onlinePeopleExcludingOurUser[userId].username)。类型不匹配会触发PropTypes警告,可能导致组件渲染异常,间接影响其他Prop的正常传递。

修改Contact.jsx中的Prop类型定义:

Contact.propTypes = {
  id: PropTypes.string.isRequired,
  username: PropTypes.string.isRequired, // 改为string类型
  func: PropTypes.func.isRequired,
  selected: PropTypes.bool.isRequired,
  online: PropTypes.bool.isRequired,
};

2. 排查所有Contact组件的渲染实例

确认项目中所有使用Contact组件的地方,都严格传递了funcProp,且值为函数类型。如果存在某个实例未传递func,即使PropTypes标记为必填,在非严格模式下可能仅触发警告,但运行时func会是undefined,点击时就会报错。

3. 确保数据源存在有效属性

检查onlinePeopleExcludingOurUser[userId]是否存在有效对象:如果userId对应的对象不存在,username会变为undefined,触发PropTypes错误,干扰组件正常渲染。可以通过可选链避免这种情况:

<Contact
  id={userId}
  username={onlinePeopleExcludingOurUser[userId]?.username || ''}
  func={() => setselectedUserId(userId)}
  selected={userId == selectedUserId}
  online={true}
/>

4. 临时添加容错判断(可选)

在Contact组件的点击事件中添加判断,避免func为undefined时执行报错:

onClick={() => typeof func === 'function' && func(id)}

5. 打印调试确认func值

在Contact组件开头添加日志,确认传递过来的func实际类型:

export default function Contact({ id, username, func, selected, online }) {
  console.log('Received func:', func, 'Type:', typeof func); // 调试日志
  // ... 组件其余代码
}

通过以上步骤,定位并修复func未正确传递的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:08:27