React 组件中无法清除定时器问题记录

React 组件中无法清除定时器问题记录

需求

关闭弹窗时,需要把页面透传到组件中的定时器清除掉

问题发现

部分代码

js 复制代码
const serviceModal: FC = () => {
	// xxxx 一些操作
	let timeoutTimer: any = null
	timeoutTimer = setTimeout(() => {}, 3000)

	// xxxx 一些操作
	clearTimeout(timeoutTimer)
}

clearTimeout发现清除不掉,就在清除定时器的前后分别打印了一下timer,发现log出来的全都是undefined。

网上查询之后了解到:清除定时器,定时器的标识会在一瞬间变为 undefined , 但立马就会又重新开始执行定时器,而且定时器标识不变。所以无法清除定时器

原因

函数组件的本质是一个函数,而在在一个局部函数中,函数每一次执行,都会在把函数的变量重新生成一次。

本次解决方案

将定时器变量定义在函数组件外部(全局)

js 复制代码
let timeoutTimer: any = null
const serviceModal: FC = () => {
	// xxxx 一些操作
	timeoutTimer = setTimeout(() => {}, 3000)

	// xxxx 一些操作
	clearTimeout(timeoutTimer)
}

其他解决方案

可将定时器放入state中,感兴趣的可以自己测试下

相关推荐
紧跟先前的步伐5 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
吠品5 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
日日大王学编程6 小时前
#Feed 流项目复盘:Redis 时间线缓存与 Outbox 消息可靠性设计
golang·1024程序员节
小嘉丶学长9 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
大江东去浪淘尽千古风流人物15 小时前
【FLORA】机器人视频标注引擎解析:三模型如何产出动作指令与四类奖励信号
matlab·机器人·跨模态·遥感·图像匹配·1024程序员节·特征描述符
【 STM32开发 】16 小时前
【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA (F103版本)
stm32·单片机·嵌入式硬件·1024程序员节
牢姐与蒯18 小时前
WSL2 迁移教程:把Ubuntu+WSL2从C盘挪到别的盘
linux·运维·服务器·网络·ubuntu·1024程序员节
1-1=019 小时前
.NET Core 配置与选项
.net·.netcore·1024程序员节
搭贝19 小时前
【无标题】
人工智能·低代码·ai·1024程序员节·搭贝
云和数据.ChenGuang1 天前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节