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

NextJS中使用getInitialProps获取数据后页面无法渲染但console.log能正常输出数据的问题

问题:NextJS中getInitialProps获取数据后无法渲染,但console.log正常输出

嘿,我一眼就瞅到你代码里的问题了——在map的回调函数里,你多套了一层额外的花括号{},这直接导致你的JSX没被正确返回,页面自然就看不到内容了!

咱们拆解下原因:当你写{this.props.siswa.map(siswa => { ... })}时,回调里的{}是用来包裹代码块的,但如果代码块里没有显式的return语句,这个函数就不会返回任何东西。你里面的console.log(siswa)能正常执行,是因为它在代码块里被运行了,但后面的JSX片段根本没被返回出去,React自然没法渲染它。

修复方案

给你两种简单的修复方式,选哪种都行:

方法1:用箭头函数隐式返回(更简洁推荐)

把回调里的外层花括号改成圆括号,箭头函数会自动返回圆括号里的JSX内容:

{this.props.siswa.map(siswa => (
  <div key={siswa.id} className="flex"> 
    <div className="py-8 px-8 w-full lg:max-w-sm bg-white rounded-xl shadow-md hover:shadow-xl space-y-2 sm:py-4 sm:flex sm:items-center sm:space-y-0 sm:space-x-6 dark:bg-indigo-600 ml-0 lg:ml-3 sm:mt-2 md:w-full">
      <img className="block mx-auto object-cover w-24 h-24 rounded-full sm:mx-0 sm:flex-shrink-0" src={`/img/siswa/${siswa.id}.jpg`} loading="lazy" />
      <div className="text-center space-y-2 sm:text-left">
        <div className="space-y-0.5">
          <p className="text-lg text-black font-semibold dark:text-gray-200">
            {siswa.panggilan}
          </p>
          <p className="text-gray-500 font-medium dark:text-gray-300">
            {siswa.nama}
          </p>
        </div>
        <button id="om" className="px-4 py-1 text-sm text-indigo-600 font-semibold rounded-full border border-indigo-400 hover:text-white hover:bg-indigo-600 hover:border-transparent focus:outline-none focus:ring-1 focus:ring-indigo-600 focus:ring-offset-2 dark:text-gray-200 dark:border-white dark:hover:text-gray-200 dark:hover:border-indigo-800 dark:hover:bg-indigo-800 dark:focus:ring-indigo-800 w-full md:w-2/4" onClick={() => this.setState({showModalSiswa: true})}>Detail</button>
      </div>
    </div>
  </div>
))}

方法2:显式添加return语句

如果想保留花括号包裹代码块,就在JSX前面加上return关键字:

{this.props.siswa.map(siswa => { 
  console.log(siswa);
  return (
    <div key={siswa.id} className="flex"> 
      {/* 后续JSX内容和上面一致 */}
    </div>
  )
})}

另外还要提醒你:React遍历渲染列表时,一定要给每个子元素加上唯一的key属性(我上面的代码已经加了key={siswa.id}),这能帮React更高效地更新DOM,避免不必要的重渲染哦。

现在再运行代码,页面应该就能正常显示数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:38:12