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

React项目中setInterval每次超时执行两次问题求助

问题原因分析:setInterval执行两次导致状态数组重复添加值

核心原因:React严格模式(Strict Mode)的开发环境行为

在React开发环境中,Strict Mode会刻意重复执行部分核心逻辑,用于检测代码中的潜在问题,包括:

  • 组件初始化相关函数
  • useEffect的回调函数

你的代码中,useEffect依赖数组为空[],本应在组件挂载时执行一次,但在Strict Mode的作用下,这个useEffect会被执行两次,直接创建了两个独立的setInterval定时器实例。每个定时器都会每秒触发一次回调逻辑,最终表现为状态数组每次被添加两个值。

次要隐患:未清理定时器

你的useEffect没有返回清理函数来执行clearInterval(interval)。即使没有Strict Mode的影响,组件卸载时定时器会持续在后台运行造成内存泄漏;而在Strict Mode下,两次创建的未清理定时器会进一步加剧重复执行的问题。

代码中的额外问题(非直接诱因,但需修正)

  • 操作labels.current时,length>10的分支错误使用dataSet.slice(应改为labels.current.slice),还错误赋值给labels.current.value(useRef的当前值需通过current属性访问,不存在value属性)。
  • 外层操作labels.current时依赖了dataSet的闭包值,可能导致标签与数据不同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:03:22