gpt4 book ai didi

reactjs - React 在异步回调中记住值

转载 作者:行者123 更新时间:2023-12-04 15:00:47 26 4
gpt4 key购买 nike

React 意外地保留了由 React.useState(...) 生成的变量的旧值。我按下按钮 [1],然后按下 [2]。在 3000 毫秒内,我希望在警报消息中看到 "null",但仍然看到 "42"。将 handleDisplay 包装到 React.useCallback 中并依赖于 [val] 没有帮助。

function App() {
const [val, setVal] = React.useState(42)

const handleHide = () => {
setVal(null)
}

const handleDisplay = () => {
setTimeout(() => {
alert(val)
}, 3000)
}

return (
<div>
<p>VAL: {val ? val : 'null'}</p>
<button onClick={handleDisplay}>[1] display value with delay</button>
<button onClick={handleHide}>[2] hide immediately</button>
</div>
)
}

同时 — 页面上的值(通过 VAL: { val ? val : 'null' } 呈现)是正确的,它是 "null" 作为预期的。关于我做错了什么以及如何在我的 alert(...) 中获取 "null" 有什么想法吗?

附言这是一个带有实例的沙箱 https://codesandbox.io/s/react-usestate-bug-24ijj

最佳答案

在第一次渲染时,val 只是一个常数,其值为 42,永远不会改变。这是单击按钮 1 时传递给 setTimeout 的值。在 3 秒过去之前单击按钮 2 将导致新渲染,其中 val 的新实例具有值 null,但这不会影响第一次渲染中绑定(bind)的值.您可能想阅读 useEffect Hook 。 Dan Abramov 在这里有一篇很棒但很长的文章,其中只提到了这个问题:https://overreacted.io/a-complete-guide-to-useeffect/

关于reactjs - React 在异步回调中记住值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66991645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com