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

React递归组件传递props时单独传参失效、展开语法生效的原因是什么?

React递归组件props传参差异原因解析

核心本质:两种传参方式生成的props结构完全不同

React组件接收的第一个参数永远是所有传入属性组成的集合对象,两种写法传入后组件拿到的props结构有本质区别:

  • 第一种写法 <RecursiveComponent itemProps={data} />
    此时组件拿到的props(你代码中命名的itemsProp)结构为:
    {
      itemProps: {
        name: 'Level 1',
        children: [/* 嵌套数据 */]
      }
    }
    
    你代码中直接访问itemsProp.name、itemsProp.children是取不到对应值的,对应值实际存放在itemsProp.itemProps.name、itemsProp.itemProps.children下,因此组件无法正常运行。
  • 第二种写法 <RecursiveComponent {...data} />
    ...是对象展开语法,会把data内的所有键值对拆解为独立属性传给组件,此时组件拿到的props结构为:
    {
      name: 'Level 1',
      children: [/* 嵌套数据 */]
    }
    
    和你代码中访问itemsProp.name、itemsProp.children的逻辑完全匹配,因此可以正常运行。

拓展:第一种传参方式的兼容修改方案

如果要保留<RecursiveComponent itemProps={data} />的传参写法,只需要调整组件接收参数的逻辑,解构出传入的itemProps属性即可:

const RecursiveComponent = ({itemProps}) => {
  const hasData = itemProps.children && itemProps.children.length;
  return (
    <>
      {itemProps.name}
      {hasData && itemProps.children.map((child) => {
        return <RecursiveComponent itemProps={child} key={child.name} />
      })}
    </>
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:36:01