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

React函数组件同时接收props与父组件callback回调报错如何解决

React函数组件同时接收回调和其他props的正确实现

核心原因

React函数组件仅第一个参数为父组件传入的所有props集合,第二个参数为React预留的ref转发参数,无法用来接收自定义属性,你之前的写法是对参数规则理解有误导致的。

两种常用实现方案

  • 方案1:参数直接解构(推荐,最常用)
    直接在参数位置解构出需要的回调和其他属性,不需要的剩余属性可以用扩展运算符收集:
// 示例中解构了childToParent回调、title、listData属性,剩余所有未显式声明的属性都存在rest对象中
export default function List({ childToParent, title, listData, ...rest }) {
  // 调用回调直接写childToParent(要传给父组件的值)即可
  // 其他属性直接用title、listData即可
  // 剩余属性可以通过rest.xxx访问
}
  • 方案2:保留完整props对象后二次解构
    如果你需要保留完整的props对象使用,可以先接收全量props,再单独解构出回调:
export default function List(props) {
  // 解构出回调,其他属性可以从otherProps或者直接从props取
  const { childToParent, ...otherProps } = props

  // 示例调用回调
  const handleClick = (item) => {
    childToParent(item)
  }

  // 其他逻辑
}

错误写法的报错原因

  • ({childToParent}, props)写法:第二个参数并非自定义props,是React用于forwardRef的预留参数,自然拿不到父组件传的其他属性
  • ({childToParent, props})写法:等同于要求父组件传入一个名为props的属性,父组件未传该属性时拿到的就是undefined,无法获取其他属性值

父组件调用示例

// 父组件内正常传参即可,不需要特殊处理
function Parent() {
  const handleChildCallback = (val) => {
    console.log('接收子组件传值:', val)
  }
  return (
    <List 
      childToParent={handleChildCallback}
      title="测试列表"
      data={['a','b','c']}
    />
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:39:03