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

注释React useEffect定时器清除函数后,mytime为何每次递增2?

问题原因解析

注释掉return () => clearInterval(myInterval);后,mytime每秒递增2的核心原因是React严格模式在开发环境下的双重执行特性:

  • React严格模式为检测潜在代码问题,会在开发环境中对组件渲染、副作用(比如useEffect)执行两次。
  • 你的useEffect依赖数组为空[],本应只在组件首次挂载时执行一次,但在严格模式下会被执行两次,创建了两个独立的定时器。
  • 这两个定时器每秒都会触发setMytime((prevTime) => prevTime + 1),每秒钟mytime被两次加1,最终表现为每次递增2。
验证与修复方案
  • 关闭严格模式(移除项目根组件外层的<StrictMode>标签),mytime会恢复每秒递增1的正常表现。
  • 正确做法是保留清理函数:组件卸载时会清除定时器,同时严格模式下,React第一次执行useEffect后会立即调用清理函数,再执行第二次useEffect,确保始终只有一个有效定时器,避免重复创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:23:11