【发布时间】:2020-08-18 05:10:39
【问题描述】:
我正在创建一个秒表,它有一个开始和停止时间的按钮,但我遇到了 setInterval 行为问题。
在 React 的功能组件级别声明时,它会在安装后运行。
示例:
const Timer = () => {
const timer = setInterval(() => console.log('running'), 1000)
}
当我在函数中声明它时,在调用该函数之前它不会运行,但我无法让它停止。
const Timer = () => {
const [start, setStart] = useState(false)
const startStopTimer = () => {
const timer = setInterval(() => console.log('running'), 1000)
}
return (<Button
onClick={() => {
setStarted(!start)
startStopTimer()
}
> Start/Stop </Button>)
}
然后我尝试在函数中添加clearInterval(),如果start === false 有条件地调用它。在这个实现中,第一个按钮点击什么都不做。第二次点击启动计时器,但无法停止。
const Timer = () => {
const [start, setStart] = useState(false)
const startStopTimer = () => {
let timer = setInterval(() => console.log('running'), 1000)
if (!started) clearInterval(timer)
}
return (<Button
onClick={() => {
setStarted(!start)
startStopTimer()
}
> Start/Stop </Button>)
}
【问题讨论】:
-
因为你一直在创建变量 timer。
标签: javascript reactjs setinterval