为什么在执行runTimer之后,它每秒都会不断地记录0?
const [timer, setTimer] = useState(0)
const runTimer = (x) => {
let interval = setInterval(() => {
setTimer(prev => prev - 1)
console.log(timer)
}, 1000)
}发布于 2020-03-10 21:00:47
该值具有作用域,并且将始终保持不变
尝试将该值记录到外部,因为状态更改将强制呈现。同样,State永远不应该“变异”。状态应该始终是一个新对象,而不是一个突变。
const [timer, setTimer] = useState(0)
const runTimer = (x) => {
let interval = setInterval(() => {
setTimer(prev => prev - 1)
}, 1000)
}
console.log(timer)你的第二个问题
let interval的作用域意味着您只能在该级别执行clearInterval。我不确定用这种方法做这件事的好方法。您可能希望使用钩子useEffect来设置间隔。
发布于 2020-03-10 21:12:13
setTimer是异步调用,您无法在设置状态后立即获取timer。
useEffect是来营救的。
useEffect(() => {
// your action
}, [timer]);您将始终获得更新后的timer值。
https://stackoverflow.com/questions/60618142
复制相似问题