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

相关推荐
拔剑纵狂歌7 天前
ClickHouse system.query_log 字段详解与排障实践
后端·clickhouse·1024程序员节
比奥利奥还傲.20 天前
哪吒监控面板实战:部署 Dashboard、接入 Agent、钉钉告警,再配置固定公网访问
网络·人工智能·分布式·1024程序员节
默 语21 天前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
学传打活1 个月前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续3)
微信公众平台·1024程序员节·汉字·昆仑正义文化
学传打活1 个月前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng1682 个月前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心2 个月前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055272 个月前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055272 个月前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝2 个月前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节