我正在尝试创建秒表功能。我正在使用setInterval函数来每1000 ms递增定时器变量。在这一点上一切都很好。但是,当我尝试将需要更新的状态包含到setInterval函数中时;它破坏了代码,并开始笨拙和不一致地打印。
我把我的代码写在下面。我注解掉了导致错误的行。在我取消注解这些行之前,一切都运行得很好。我真的需要弄明白到底发生了什么。
import { useState } from "react"
function Timer() {
const [time, setTime] = useState({
hr: 0,
min: 0,
sec: 0
})
const timeCalc = {
seconds: 0,
minutes: 0,
hours: 0,
timeCount() {
let interval = setInterval(() => {
this.seconds++
console.log(this.seconds)
// setTime({ ...time, sec: this.seconds })
if (this.seconds === 60) {
this.seconds = 0
// setTime({ ...time, sec: 0 })
this.minutes++
// setTime({ ...time, min: this.minutes })
}
if (this.minutes === 60) {
this.minutes = 0
// setTime({ ...time, min: 0 })
this.hours++
// setTime({ ...time, hr: this.hours })
}
}, 1000)
}
}
timeCalc.timeCount()
return (
<div>
<span>{`00${time.hr} : `.slice(-5)}</span>
<span>{`00${time.min} : `.slice(-5)}</span>
<span>{`00${time.sec}`.slice(-2)}</span>
</div>
)
}
export default Timer
1条答案
按热度按时间xlpyo6sf1#
为了使这工作,您的代码存在一些问题
修复代码:
下面是codesandbox https://codesandbox.io/s/dazzling-fire-68wjtf中的结果
只有一些与你的代码相关的建议
this
关键字,可能没有必要,相反,你可以使用const,let,states或refs这将是遵循此建议后的重构
代码沙盒https://codesandbox.io/s/bold-mendel-fv3r2v?file=/src/App.js