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

Next.js/React父子组件传参报错:TypeError读取screenName未定义

解决Next.js父组件向子组件传参的TypeError问题

你遇到的错误:

TypeError: Cannot read properties of undefined (reading 'screenName')

问题出在父组件传参的属性名和子组件接收的属性名不匹配:

错误位置对比

  • 父组件(pages/artist/[artistId].js)中传递参数:

    <ArtistHeader data={artist}/>
    

    这里传的props属性名是data

  • 子组件(components/ArtistHeader.js)中接收参数:

    export default function ArtistHeader({ artist }) {
    

    这里期望接收的props属性名是artist

因为子组件找不到名为artist的props,所以artist变量是undefined,访问artist.screenName就会抛出TypeError。

两种修复方案

方案1:修改父组件的传参名(推荐,保持语义一致)

把父组件里的传参代码改成:

<ArtistHeader artist={artist}/>

方案2:修改子组件的接收名

把子组件的接收逻辑和内部引用全部改成data:

export default function ArtistHeader({ data }) {
  return (
    <header className={styles.artistContainer}>
      <p>{data.screenName}</p>
      <Image 
        className={styles.artistHeader}
        priority="true"
        src={data.artistMainImg}
        alt={data.screenName}
        width="1280px"
        height="200px"
        layout="intrinsic"
        objectPosition="center"
      />
    </header>
  )
}

额外建议

为了避免API返回数据为空时再次报错,建议在代码中添加可选链操作符(?.)做空值保护:

  • 父组件中:{artist?.screenName}
  • 子组件中:{data?.screenName} 或 {artist?.screenName}(根据最终采用的方案调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:33:13