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

为何传递props会被嵌套进对象?如何实现非嵌套传参?

React组件Props嵌套问题解答

为什么会出现Props嵌套?

你在父组件中传递参数时写了<PartnerPanel props={partners} />,这相当于给子组件传入了一个键名为props、值为partners数组的属性。React组件的所有传入参数都会被打包成一个单一的对象(也就是子组件函数的props参数),所以你必须通过props.props才能拿到目标数组——这是你自己把数组放在了props这个键下面导致的嵌套。

如何避免Props嵌套?

有两种常用方式可以直接获取目标数据,不用嵌套访问:

方式1:使用语义化的属性名传递

给传入的属性起一个更清晰的名字(比如partners),而非用props作为键:

  • 父组件代码修改:
const Partners: NextPage = () => {
  return (
    <>
      <PartnerPanel partners={partners} />
    </>
  );
};
  • 子组件类型定义与代码修改:
// 类型定义直接对应属性名
type PropsType = {
  partners: { name: string }[];
};

export const PartnerPanel: FC<PropsType> = (props): JSX.Element => {
  // 直接通过props.partners访问数组
  return <div>{props.partners[0].name}</div>;
};

方式2:解构子组件的Props参数

如果不想每次都写props.xxx,可以在子组件中直接解构出需要的属性,让代码更简洁:

type PropsType = {
  partners: { name: string }[];
};

// 直接解构partners属性
export const PartnerPanel: FC<PropsType> = ({ partners }): JSX.Element => {
  return <div>{partners[0].name}</div>;
};

额外说明

React组件的Props本质上是一个键值对对象,无法直接传递非对象类型作为整个Props(比如直接传数组)。所以必须通过“键名+值”的方式传递数据,只要你不用props作为键名,就不会出现props.props的嵌套情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:44