【发布时间】:2019-11-29 21:39:47
【问题描述】:
我正在尝试使用反应挂钩在屏幕上呈现倒计时计时器,但我不确定呈现它的最佳方式。
我知道我应该使用 useEffect 来比较当前状态和以前的状态,但我认为我做得不对。
非常感谢您的帮助!
我尝试了几种不同的方法,但它们都不起作用,例如每当更新时设置状态,但它最终会像疯了一样闪烁。
const Timer = ({ seconds }) => {
const [timeLeft, setTimeLeft] = useState('');
const now = Date.now();
const then = now + seconds * 1000;
const countDown = setInterval(() => {
const secondsLeft = Math.round((then - Date.now()) / 1000);
if(secondsLeft <= 0) {
clearInterval(countDown);
console.log('done!');
return;
}
displayTimeLeft(secondsLeft);
}, 1000);
const displayTimeLeft = seconds => {
let minutesLeft = Math.floor(seconds/60) ;
let secondsLeft = seconds % 60;
minutesLeft = minutesLeft.toString().length === 1 ? "0" + minutesLeft : minutesLeft;
secondsLeft = secondsLeft.toString().length === 1 ? "0" + secondsLeft : secondsLeft;
return `${minutesLeft}:${secondsLeft}`;
}
useEffect(() => {
setInterval(() => {
setTimeLeft(displayTimeLeft(seconds));
}, 1000);
}, [seconds])
return (
<div><h1>{timeLeft}</h1></div>
)
}
export default Timer;```
【问题讨论】:
-
并注意在拆机时取消间隔
标签: javascript reactjs react-hooks