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

Next.js fetch数据未在模板渲染且接口重复调用两次问题排查

问题根因

两个异常的原因分别是:

  • 页面无渲染内容:Array.map的回调使用花括号包裹逻辑时,没有显式return要渲染的JSX节点,你写的{blogs.blog_title;}只是孤立的执行语句,没有返回值,最终遍历生成的数组全是undefined,页面自然不会展示任何内容。
  • 接口重复调用两次:Next.js在开发环境默认开启React严格模式,会重复执行一次数据请求、组件生命周期相关逻辑,用来检测代码里的不规范写法,这个行为仅在开发环境生效,生产构建后不会出现重复请求,不属于代码bug。
修复代码

直接替换成下面的写法即可正常渲染:

export default function Content({ blog }) {
  return (
    <>
      {blog.map((singleBlog) => (
        // 记得给列表项加唯一key,用数据自带的id即可,不要用遍历下标
        <div key={singleBlog.id}>{singleBlog.blog_title}</div>
      ))}      
    </>
  );
}


export async function getServerSideProps() {
  // 从外部API拉取数据
  const url = "http://127.0.0.1:8000/blog-api";
  const headers = {
    "Content-Type": "application/json",
    Authorization: "<secret>",
  };

  const res = await fetch(url, { headers });
  const data = await res.json();
  console.log(data);
  // 通过props把数据传给页面
  return {
    props: {
      blog: data,
    },
  };
}
补充说明

如果确实想在开发环境关闭重复请求,可以去项目根目录的next.config.js中把reactStrictMode配置项设为false,但不推荐这么做,严格模式可以提前帮你排查很多隐蔽的代码问题,避免线上出bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:03:27