react、vue 的hooks定时执行函数 定时请求、定时更新

import { useEffect, useRef } from "react";

/**
 * @description 定时执行函数
 * 定时请求、定时更新等
 * @param {Function} callback 定时执行的函数(必传)
 * @param {number null} delay 定时时间(默认5秒)
 * @param {number} key 重置键(默认无)
 * */
export const useInterval = (callback: () => void, delay: number | null = 5000, key?: number) => {
	const savedCallback = useRef<() => void>();

	// 更新保存的回调
	useEffect(() => {
		savedCallback.current = callback;
	}, [callback]);

	// 管理定时器
	useEffect(() => {
		const tick = () => {
			savedCallback.current?.(); // 安全调用
		};

		if (delay !== null) {
			tick(); // 立即执行一次
			const id = setInterval(tick, delay);
			return () => clearInterval(id); // 清理旧定时器
		}
	}, [delay, key]);
};

  • 页面调用
	import { useInterval } from "@/hooks/useInterval";
	
	...
	// 通过 key 强制重置定时器
	const [timerKey, setTimerKey] = useState(0); 
	// 轮询请求
	useInterval(fetchData, 5000, timerKey);
	// 重置定时器的回调
	const handleResetPolling = useCallback(() => {
		setTimerKey(prev => prev + 1);
	}, []);
	// 按钮点击或者重新选择后重置定时器
	const handleChange = (value: string) => {
		handleResetPolling();
	};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值