【发布时间】:2021-02-24 23:25:32
【问题描述】:
我不太明白 React 如何切换布尔值。 所以,我有两个按钮。一个控制台记录状态的当前值(设置为真),另一个将其更新为相反(假)并控制台记录其值。 问题是,根据console.log,第二个按钮的状态没有改变,但是当我用第一个按钮检查状态时,它显示状态已更新。
const App = () => {
const[toggle, setToggle] = useState(true);
return(
<button onClick={()=>{
console.log(toggle)
}}>Button 1</button>
<button onClick={()=>{
setToggle(!toggle)
console.log(toggle)
}}>Button 2</button>
}
【问题讨论】:
-
有时状态更新和反应组件知道它已更新之间存在延迟。尝试在设置状态的函数之外记录切换。
-
setToggle不会立即更改toggle变量的值 - 这是不可能的。相反,它使用新值安排重新渲染。因此,您的console.log运行“为时过早”,无法“看到”变化。 -
setState是异步的,每当您单击按钮时,状态都会发生变化,但如果您立即尝试记录它,它将不会显示。
标签: javascript reactjs