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

React项目中Chrome控制台打印接口数据重复两次的原因咨询

问题分析与解决

你这段代码里的useEffect用了空依赖数组[],按道理应该只在组件挂载时执行一次接口请求和打印,但开发环境下出现两次打印,最常见的原因是React Strict Mode(严格模式)。

核心原因:

React的严格模式在开发环境中,会刻意重复调用部分操作来帮你提前排查潜在问题:

  • 组件渲染函数
  • useEffect、useLayoutEffect的回调函数
  • 状态更新函数等

它会模拟「组件挂载-卸载-重新挂载」的过程,所以你的useEffect会被执行两次,接口请求发两次,打印自然也会出现两次。这是开发环境的正常调试机制,生产环境打包后Strict Mode会自动失效,不会有这个问题。

处理方案:

  1. 默认忽略(推荐):这是React帮你提前发现副作用隐患的手段(比如未清理的订阅、非纯函数逻辑),生产环境不会触发,完全不影响线上功能。
  2. 临时关闭Strict Mode:如果调试时觉得这个行为干扰,可以找到项目入口文件(比如index.js或main.jsx),去掉<React.StrictMode>的包裹:
    原代码可能是这样:
ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

改成:

ReactDOM.createRoot(document.getElementById('root')).render(
    <App />
);

另外也可以简单排查下组件是否被意外重复挂载(比如父组件每次渲染都创建新的子组件实例、key值不稳定),但这种情况相对少见,优先考虑Strict Mode的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39