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

React向子组件传递Props报错:Cannot read property 'name' of undefined

问题排查:Cannot read property 'name' of undefined

我来帮你分析下这个错误的原因,其实问题出在子组件的render方法写法上,咱们一步步拆解:

错误根源

React组件的render函数默认接收的是完整的props对象,而不是直接把props里的字段拆成参数传入。你现在子组件里写的render({ name, street, state }),相当于试图从render的第一个参数(也就是props)里直接解构这三个属性,但实际上你的子组件从App接收到的props只有一个data字段(因为App里是<From data={ from } />这样传递的),所以解构出来的name、street、state全都是undefined,自然会抛出Cannot read property 'name' of undefined的错误。

两种修复方案

方案1:子组件从props.data中解构属性

修改子组件的render方法,先拿到props.data再解构需要的字段:

render(props) {
  const { name, street, state } = props.data;
  return (
    <div className="From">
      <span> { name } </span>
      <br />
      <span> { street } </span>
      <br />
      <span> { state } </span>
    </div>
  )
}

方案2:传递props时直接展开属性(更简洁)

如果你想让子组件直接拿到name、street这些属性,可以修改App组件里的传递方式,用扩展运算符把from/to的字段直接传给子组件:

// App组件的render部分
return (
  <div className="Envelope">
    <Stamp />
    <From {...from} />
    <To {...to} />
  </div>
);

这样子组件的render就可以直接从props里解构字段了,写法也和你原来的思路一致:

// 两种写法都可行
render({ name, street, state }) {
// 或者先接收props再解构:
// render(props) {
//   const { name, street, state } = props;
  return (
    <div className="From">
      <span> { name } </span>
      <br />
      <span> { street } </span>
      <br />
      <span> { state } </span>
    </div>
  )
}

小优化提示

你的App组件里写的const { from, to } = {...this.props.data }其实没必要用扩展运算符,直接写成const { from, to } = this.props.data;就可以了,展开操作在这里是多余的哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:30:49