【发布时间】:2021-11-02 20:10:57
【问题描述】:
我有一个状态变量来确定按钮是否被渲染。按钮的 onclick 处理程序切换状态并应该删除按钮。但是状态永远不会在事件处理程序中更新(在 Safari 中由于上帝的力量而正常工作)。所有其他函数调用都可以正常工作。但是状态永远不会更新,即使有延迟也不会更新(在 devtools 中检查)。它看起来像..
const [shown, setShown] = useState(true)
return (
shown ? (
<button
onClick={(ev) => {
console.log(shown) // outputs true
setShown(false) // does absolutely nothing, no errors
console.log(shown) // outputs true
}}
></button>
) : (
<OtherElement />
)
)
我猜这是一个简化版本。我通过将 onClick 更改为“解决”了这个问题
onClick={ () =>
setTimeout(
setShown.bind(undefined, false)
,0)
}
我不确定这是否理想。有什么想法吗?
【问题讨论】:
-
我在下面回答了您的问题,如果有帮助请标记为已回答
标签: javascript reactjs react-hooks jsx