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中,感兴趣的可以自己测试下

相关推荐
淼_@淼16 分钟前
python-xml
xml·python·1024程序员节
gAlAxy...19 分钟前
XML:从基础到 Schema 约束的全方位解析
1024程序员节
南方的狮子先生31 分钟前
【数据结构】(C++数据结构)查找算法与排序算法详解
数据结构·c++·学习·算法·排序算法·1024程序员节
---学无止境---32 分钟前
Linux中初始化根文件系统populate_rootfs的实现
1024程序员节
成长痕迹1 小时前
【Electron桌面应用完整方案】
1024程序员节
陌上明苏1 小时前
使用ssrs矩阵
1024程序员节
墨利昂1 小时前
深度学习常用优化器解析
人工智能·深度学习·机器学习·1024程序员节
asdfsdgss1 小时前
PyTorch 生成式 AI(1):模型训练过拟合处理,神经网络正则化方法详解
1024程序员节
PyHaVolask1 小时前
Metasploit网络嗅探实战:从数据包捕获到协议分析的完整指南
数据包分析·metasploit·1024程序员节·流量分析·网络嗅探
XH-hui2 小时前
【打靶日记】THL 之 Facultad
linux·网络安全·1024程序员节·thehackerlabs