直接上代码:
import React, { useState, useEffect } from 'react';
import TextWrapper from '../TextWrapper';
import LogUtil from '../../../utils/log_util';
/**
*
* minutes 请传毫秒值
* onTimeElapsed 倒计时结束时触发回调
* isUseOriginValue 是否使用原始值
* style 样式
*/
const CountdownTimerView = ({ tipText, minutes, onTimeElapsed, showHours = true, showMinutes = true, isUseOriginValue = false, style }) => {
LogUtil.log('CountdownTimerView - minutes = ', minutes / 1000);
let [seconds, setSeconds] = useState(Math.ceil(minutes / 1000));
useEffect(() => {
setSeconds(Math.ceil(minutes / 1000));
}, [minutes]);
useEffect(() => {
let interval;
if (seconds > 0) {
interval = setInterval(() => {
setSeconds(rt => rt - 1);
}, 1000);
}
if (seconds <= 0) {
onTimeElapsed();
interval && clearInterval(interval);
}
return () => interval && clearInterval(interval);
}, [seconds, onTimeElapsed]);
const formatTime = (time) => {
// const date = new Date(time);
// const hours = date.getHours();
// const minutes = date.getMinutes();
// const seconds = date.getSeconds();
const hours = Math.floor(time / 3600); // 转换为小时
const minutes = Math.floor((time % 3600) / 60); // 转换为分钟
const seconds = time % 60; // 转换为秒钟
LogUtil.log(`CountdownTimerView - formatTime: ${time}, seconds: ${seconds}`);
if (showHours && showMinutes) {
return hours + ":" + minutes + ":" + seconds;
} else if (showHours && !showMinutes) {
return hours + ":" + seconds;
} else if (!showHours && showMinutes) {
return minutes + ":" + seconds;
} else {
return seconds;
}
};
return (
<TextWrapper style={style}>
{tipText ? tipText : ''}{isUseOriginValue ? seconds : formatTime(seconds)}
</TextWrapper>
);
};
export default React.memo(CountdownTimerView);
调用:
<CountdownTimerView
minutes={‘请传毫秒时间戳’}
onTimeElapsed={() => {
onTimeElapsed?.call();
LogUtil.log("CountdownTimerView - onTimeElapsed end")
}}
style={[stl.FCB2B2B2, stl.fontSize15]}
/>