利用useRef hooks 解决 定时器关闭不到的问题

本文记录了在开发过程中遇到的一个问题:当React组件卸载后,定时器未能停止导致轮询无法结束。通过引入useRef Hook,实现了在组件卸载时正确清理定时器,从而解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发记录-20220328

原实现方式

import { useRef, useState } from 'react'

export default function Page() {
	const [timerId, setTimerId] = useState(null)

	useEffect(()=>{
		const timerId = setInterval(()=>{
			// 异步获取逻辑
		}, 时间间隔)
		setTimerId(timerId)
		return ()=>{
			timerId && clearInterval(timerId)
		}
	},[])

	return <>页面结构...</>
}

出现问题:组件卸载后,定时器未停止(轮询结束不了)

修改后的实现方式

import { useRef, useEffect } from 'react'

export default function Page() {
	const timeIdRef = useRef()

	useEffect(()=>{
		const timerId = setInterval(()=>{
			// 异步获取逻辑
		}, 时间间隔)
		// 保存当前timeId
		timeIdRef.current = timerId
		return ()=>{
			timeIdRef.current && clearInterval(timerIdRef.current)
		}
	},[])

	return <>页面结构...</>
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值