为什么在点击按钮时没有记录更新后的计数值。它总是在按钮点击时记录上一个计数值。代码是这样的-
import { useState } from "react";
export default function App() {
const [count, setCount] = useState(0);
function updateCount() {
setCount(count + 1);
console.log(count);
}
return (
<div className="App">
<div>
<p>You clicked {count} times</p>
<button onClick={() => updateCount()}>Show alert</button>
</div>
</div>
);
}
4条答案
按热度按时间5lhxktic1#
当您的状态依赖于旧状态值时,必须按如下方式进行更新:
您必须记住,更新状态不是立竿见影的操作,它非常快,但只需几毫秒
7vux5j2d2#
我最近正在学习React,我正面临着和你完全一样的问题。正如Mohammad所提到的,sole.log给出前一个值的原因是,在相同的方法中,您正在记录和更新值,并且它们同时发生。如果您只需将console.log放在函数下面,那么每次在日志记录前完成更新值时,它都会向您显示更新后的日志。
希望这个能帮上忙!
33qvvth13#
如果您希望始终记录最新的值,只需执行以下操作:
在您的代码中,LOG函数记录一个过时的值是因为
closure
-count
值是const
,它是在第一次呈现组件时设置的。因此,当您单击该按钮时,Count的值不是新值,而是它第一次呈现时的值(即->总是比您预期的小一)。在这段代码中,日志在每次重新呈现时发生。由于单击该按钮会调用
setCount
,因此状态会更改,并且会发生重新渲染。发生这种情况时,将执行日志,您将获得最新的值:)thtygnil4#
这就是Reaction生命周期的工作方式。您的值的
console.log
将使用渲染时count
的值。渲染-->执行具有给定状态值的所有函数-->检查状态更改-->渲染-->执行具有新状态值的所有函数
每次渲染都使用静态值。
如果您希望看到您的计数输出到控制台,则需要使用
useEffect
。