【发布时间】:2021-10-20 11:59:50
【问题描述】:
function LoginComponent(){
const [clicked, setClicked] = useState(false)
function handleClick(){
console.log('before', clicked)
setClicked(true)
console.log('after', clicked)
}
return(
<a onClick={handleClick}>
random text
</a>
)
}
当我运行它时,控制台在 false 之后输出 false。为什么是这样?我不知道为什么会这样。
【问题讨论】:
-
状态是异步更新的,并且在组件的特定渲染中是恒定的。组件在重新渲染之前无法看到更新的状态。您可以使用
useEffect挂钩查看更新状态:useEffect(() => { console.log(clicked) }, [clicked]) -
clicked在const [clicked, setClicked] = useState(false)行中分配仅。调用setState将更新内部状态,导致next 调用useState以返回新值,但它也不能自动更改您的局部变量clicked。 (您可以改写类似setClicked(clicked = true)的内容并将const更改为let,以便clicked可以更改。)
标签: javascript reactjs