反应:: CountDown
呈现一个倒计时计时器,该计时器在到达零时将其打印出来。
使用对象解构到默认设置的 hours, minutes 和 seconds 道具。
使用 钩来创建 , 并且 状态变量并将其值设置为通过道具的价值, 并 分别。React.useState()timepausedoverfalsefalse
创建一个方法tick,该方法 time 根据当前值更新 值(即,将时间减少一秒钟)。
如果 paused 或者 over 是 true, tick 将立即返回。
创建一个方法 reset,将所有状态变量重置为其初始状态。
使用 钩子 通过使用每秒调用一次该 方法, 并 在卸载组件时使用 进行清理。React.useEffect()ticksetInterval()clearInterval()
使用a
包装
带有组件time 状态变量的文本表示形式的
如果 over 是 true,计时器将显示一条消息,而不是值 time。
function CountDown({ hours = 0, minutes = 0, seconds = 0 }) {
const [paused, setPaused] = React.useState(false);
const [over, setOver] = React.useState(false);
const [time, setTime] = React.useState({
hours: parseInt(hours),
minutes: parseInt(minutes),
seconds: parseInt(seconds)
});
const tick = () => {
if (paused || over) return;
if (time.hours == 0 &&time.minutes== 0 &&time.seconds== 0) setOver(true);
else if (time.minutes == 0 &&time.seconds== 0)
setTime({
hours:time.hours- 1,
minutes: 59,
seconds: 59
});
else if (time.seconds == 0)
setTime({
hours: time.hours,
minutes:time.minutes- 1,
seconds: 59
});
else
setTime({
hours: time.hours,
minutes: time.minutes,
seconds:time.seconds- 1
});
};
const reset = () => {
setTime({
hours: parseInt(hours),
minutes: parseInt(minutes),
seconds: parseInt(seconds)
});
setPaused(false);
setOver(false);
};
React.useEffect(() => {
let timerID = setInterval(() => tick(), 1000);
return () => clearInterval(timerID);
});
return (
{`${time.hours.toString().padStart(2, '0')}:${time.minutes
.toString()
.padStart(2, '0')}:${time.seconds.toString().padStart(2, '0')}`}
{over ? "Time's up!" : ''}
);
}ReactDOM.render(, document.getElementById('root'));