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

React中useEffect未触发时控制台日志为何打印两次?

为什么你的React useEffect会打印两次日志?

你提到“即便useEffect未被调用”其实是误解——你的useEffect实际上被调用了两次,这是React 18+开发模式下的默认调试行为,和StrictMode(严格模式)有关。

具体原因:

  • React 18在开发环境中开启StrictMode后,会刻意重复执行一批与组件挂载相关的逻辑,目的是帮你提前发现副作用里的潜在问题,比如未清理的订阅、重复创建的定时器等。
  • 这些会被重复执行的逻辑包括:组件渲染函数、useState初始化函数,以及useEffect的回调函数。
  • 你的代码里,初始count值为0,useEffect的依赖数组包含count,第一次挂载时执行一次;StrictMode触发组件二次渲染,此时count没有变化,依赖数组依旧是[0],但StrictMode会强制再次执行useEffect,所以控制台就打印了两次"test"。

应对方式:

  • 生产环境自动消失:当你打包项目部署到生产环境后,StrictMode会被自动禁用,useEffect只会执行一次。
  • 开发环境可手动关闭:如果觉得这个行为干扰调试,可以找到项目入口文件(通常是index.js或main.jsx),把包裹根组件的<StrictMode>标签删掉,开发模式下就只会执行一次useEffect了。

额外提醒:

这种重复执行是React的调试机制,用来检测非幂等的副作用(执行多次会出问题的逻辑)。如果你的副作用是幂等的(比如单纯打印日志、状态同步这类操作),完全不用在意这个现象;如果出现了异常,正好可以借此排查并修复问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:55:16