【发布时间】:2020-01-14 04:45:44
【问题描述】:
我想这是因为 JS 是如何工作的,但我想你不会对类有这个问题。在这段代码中:
let [open, setOpen] = React.useState(false);
let [counter, setCounter] = React.useState(0);
function handleClick() {
setOpen(true);
setInterval(() => {
console.log(counter);
setCounter(counter + 1);
}, 2000);
}
如果我调用handleClick 一次(例如单击按钮),控制台上记录的值始终为0(尽管每次都会更新状态)。
这可能是因为关闭。但是如果我想在这种设置中查看counter 的最新值怎么办?
使用类你可以完成this.state.counter 并且它会读取最新值。
钩子有一些解决方法吗?
demo.
注意:我发现this 的问题基本相同。不知怎的,我在最初的搜索中没有遇到它。
【问题讨论】:
-
const [counter... 计数器是const和setCounter(counter + 1)无论如何都不会尝试更改它 -
@JaromandaX 如果我写
let,情况也会一样。 -
是的...正如我所提到的,
setCounter(counter + 1)不会更改局部变量counter -
当然,因为计数器会保持不变,如果你想观察它是如何变化的,你可以使用
useEffect(() => console.log(counter), [counter]) -
@Kejt 是的,没关系,但似乎没有办法在这种设置中访问 setInterval 回调中的最新值。
标签: javascript reactjs