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

Next.js生产构建中useEffect仅触发一次是否符合预期?

useEffect开发与生产环境表现差异的解答

以下是涉及的useEffect代码片段:

useEffect(() => {
    console.log("useeffect 1")
    return () => {
      console.log("useeffect 2")
    };
  }, [])

在开发环境中,控制台输出为:

useeffect 1
useeffect 2
useeffect 1

在生产构建后,控制台仅输出:

useeffect 1

这种情况是否符合预期?

完全符合预期。

原因说明

React 18及以上版本的开发模式默认启用严格模式,为了帮助开发者提前排查组件在卸载/重新挂载场景下的潜在问题,会刻意触发两次组件挂载流程:第一次挂载后立即执行卸载(调用useEffect的清理函数),随后再次挂载组件。这就是开发环境中出现useeffect 1 -> useeffect 2 -> useeffect 1输出的原因。

而生产模式下,React会移除这类调试相关的行为,组件只会正常挂载一次,不会触发额外的卸载和重新挂载,因此只会执行一次useEffect的回调函数,不会调用清理函数,最终仅输出useeffect 1。

复现步骤

  • 执行命令创建Next.js项目:npx create-next-app@latest
  • 在页面文件中编写以下代码:
'use client'
import { useEffect } from "react";

export default function Home() {
  useEffect(() => {
    console.log("useeffect 1")
    return () => {
      console.log("useeffect 2")
    };
  }, [])
  return (
    <div>TEST</div>
  );
}
  • 启动开发模式:npm run dev,查看控制台输出
  • 构建并启动生产环境:执行npm run build,完成后执行npm run start,查看控制台输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:52:13