【发布时间】:2021-07-23 17:19:43
【问题描述】:
我想使用钩子 useState 和 useEffects 创建一个 60 秒的反应时间,这就是我正在做的事情
import '../assets/css/timer.css'
import { useState, useEffect } from 'react'
const Timer = () =>{
const [ time, setTime ] = useState(0);
useEffect(()=>{
if(time!==60){
setInterval(()=>{
setTime(prevTime => prevTime+1) ;
}, 1000);
}
}, [])
return(
<>
<div className="circular">
<div className="inner"></div>
<div className="outer"></div>
<div className="numb">
{time} // Place where i am displaying time
</div>
<div className="circle">
<div className="dot">
<span></span>
</div>
<div className="bar left">
<div className="progress"></div>
</div>
<div className="bar right">
<div className="progress"></div>
</div>
</div>
</div>
</>
)
}
export default Timer
定时器没有停止。它会永远持续下去。这个我也试过了
useEffect(()=>{
setInterval(()=>{
if(time!==60)
setTime(prevTime => prevTime+1) ;
}, 1000);
}, [])
请大家解释一下哪里出了问题。
【问题讨论】:
-
你的依赖数组是空的,所以效果只运行一次 - 而
time显然不是 60。您需要将time添加到依赖数组中,并在效果内返回一个清理函数(否则您将逐渐添加越来越多的间隔,因此时间似乎会不断“加速”)
标签: javascript reactjs react-hooks