在开发模式下,Next.js的 API路由会被调用多次

前端开发 2026-07-09

我在开发一个使用App Router的 Next.js应用,发现开发过程中我的API路由会被调用两次。

我在useEffect里面放了一个简单的fetch:

useEffect(() => {
  fetchUsers()
}, [])

fetchUsers() 里我调用了我的API路由:

const fetchUsers = async () => {
  const res = await fetch('/api/users')
  const data = await res.json()
  console.log(data)
}

问题是API路由在终端里日志显示两次,尽管界面在视觉上只渲染了一次。

我检查了:

  • 依赖项数组为空
  • 没有重复的组件
  • 生产构建中API路由工作正常

这是与Next.js开发模式中的React Strict Mode有关,还是我还遗漏了其他什么?

正在使用:

  • Next.js 14
  • React 18
  • App Router

解决方案

当开启严格模式时,React会在第一次真正的设置之前再运行一次仅在开发环境下的额外设置+清理周期。这是一种压力测试,确保你的清理逻辑“镜像”你的设置逻辑,并且它会停止或撤销设置所做的一切(官方文档)。

你可以在next.config.js里禁用严格模式

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: false,
}

module.exports = nextConfig

你可以在这里了解更多信息:

https://react.dev/reference/react/useEffect

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章