/**
|
* 任务计时Hook
|
* 用于实时计算和更新任务进行时间
|
*/
|
|
import { useState, useEffect, useRef } from 'react';
|
import { calculateDuration, formatMinutes } from '../utils/timeFormatter';
|
|
/**
|
* 任务计时Hook
|
* @param {number|string} startTime - 开始时间戳(毫秒)
|
* @param {boolean} isFallback - 是否为降级模式
|
* @returns {Object} { duration, formattedTime, isFallback }
|
*/
|
export const useTaskTimer = (startTime, isFallback = false) => {
|
const [duration, setDuration] = useState(0);
|
const timerRef = useRef(null);
|
|
// 初始化duration
|
useEffect(() => {
|
if (startTime) {
|
const initialDuration = calculateDuration(startTime);
|
setDuration(initialDuration);
|
}
|
}, [startTime]);
|
|
// 启动定时器
|
useEffect(() => {
|
// 清理之前的定时器
|
if (timerRef.current) {
|
clearInterval(timerRef.current);
|
}
|
|
// 只有当startTime存在时才启动定时器
|
if (startTime) {
|
timerRef.current = setInterval(() => {
|
setDuration(prev => prev + 10); // 每10秒增加10秒
|
}, 10000); // 10秒间隔
|
}
|
|
// 组件卸载时清理定时器
|
return () => {
|
if (timerRef.current) {
|
clearInterval(timerRef.current);
|
timerRef.current = null;
|
}
|
};
|
}, [startTime]);
|
|
// 格式化时间为显示文本
|
const formattedTime = formatMinutes(duration);
|
|
return {
|
duration, // 持续时间(秒)
|
formattedTime, // 格式化后的时间("XX分钟")
|
isFallback // 是否为降级模式
|
};
|
};
|