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

相关推荐
lzb_kkk6 天前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
lzb_kkk25 天前
【MFC】编辑框、下拉框、列表控件
c语言·开发语言·c++·mfc·1024程序员节
lzb_kkk1 个月前
【MFC】树控件的使用详解
开发语言·c++·windows·mfc·1024程序员节
SizeTheMoment2 个月前
List介绍
1024程序员节
开利网络2 个月前
产业互联网+三融战略:重构企业增长密码
大数据·运维·服务器·人工智能·重构·1024程序员节
wei_shuo2 个月前
从数据中台到数据飞轮:实现数据驱动的升级之路
1024程序员节·数据飞轮
玖剹2 个月前
矩阵区域和 --- 前缀和
数据结构·c++·算法·leetcode·矩阵·动态规划·1024程序员节
jamison_13 个月前
文心一言与 DeepSeek 的竞争分析:技术先发优势为何未能转化为市场主导地位?
人工智能·ai·chatgpt·gpt-3·1024程序员节
NaZiMeKiY3 个月前
HTML5前端第六章节
前端·html·html5·1024程序员节
jamison_14 个月前
颠覆未来:解锁ChatGPT衍生应用的无限可能(具体应用、功能、付费模式与使用情况)
ai·chatgpt·1024程序员节