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

NextJS中getServerSideProps获取数组后映射显示空白问题求解

问题:映射Twitch API数据时页面空白,控制台可见数据但无渲染结果

我尝试用Twitch API获取的数据创建主播列表,通过getServerSideProps传递props后页面显示空白。用console.log能看到完整数据,但映射操作没有任何结果。

我的代码:

export default function Home( { users } ) {

  console.log(users);
  
  return (
    <div>
      <Head>
        <title>Twitch</title>
        <meta name="description" content="Generated by create next app" />
        <link rel="icon" href="/favicon.ico" />
      </Head>

     
      <div className=''>
       {users.map((user) => (
         <div key={user.id}>
            <h1>{user.display_name}</h1>
        </div>
        ))}
      </div>
    </div>
  )
}

export async function getServerSideProps() {
  const res = await fetch('http://localhost:3000/api/users')
  const data = await res.json()
  const [users] = await Promise.all([data])
  return {
      props: {
          users
      }
  }
}

控制台输出:

(3) [{…}, {…}, {…}]
0: {data: Array(1)}
1: {data: Array(1)}
2: {data: Array(1)}

解答

问题出在数据结构不匹配:你打印的users数组里,每个元素都嵌套了一个data数组,主播的实际信息(比如display_name、id)在data[0]里,但你直接尝试访问user.display_name,自然找不到对应属性,导致没有内容渲染。

修复方案一:在服务端整理数据(推荐)

修改getServerSideProps,提前把嵌套的主播数据提取出来,让组件拿到干净的数组:

export async function getServerSideProps() {
  const res = await fetch('http://localhost:3000/api/users')
  const data = await res.json()
  // 提取每个元素中data数组的第一项,组成新的用户数组
  const users = data.map(item => item.data[0])
  return {
      props: {
          users
      }
  }
}

修改后,原组件里的映射代码不需要改动,就能正常渲染主播名称。

修复方案二:在组件中访问正确的路径

如果不想修改服务端逻辑,直接在组件的映射里调整属性访问路径:

<div className=''>
  {users.map((userItem) => (
    <div key={userItem.data[0].id}>
       <h1>{userItem.data[0].display_name}</h1>
    </div>
  ))}
</div>

另外,原代码里的const [users] = await Promise.all([data])属于多余代码,因为data已经是res.json()返回的结果,这行可以直接删掉,不影响功能。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:50:36