为什么我在setState后读取不到最新的state
💡
原文中文,约3000字,阅读约需7分钟。
📝
内容提要
setState函数在React中的运行机制是,它会用最新的state值去请求一个新的烘托,但正在运行的函数中的值不会受到影响。State表现为一个快照,组件在被调用时会为该次烘托提供一个state快照,然后根据这个快照计算出的值来执行烘托。在一次烘托中,state变量的值不会发生变化,因此正在运行的函数不会受到影响。解决这个问题的方法是,在更新state之前将其保存在一个变量中,然后将保存的变量传递给set函数。另外,如果需要在一次事务中多次更新同一个state,可以使用更新函数来实现。
🎯
关键要点
- setState函数在React中请求新的烘托,但不影响正在运行的函数中的值。
- React会用最新的state值请求新的烘托,组件会根据state快照计算值。
- state表现为快照,组件在调用时提供该次烘托的state快照。
- 在一次烘托中,state变量的值不会变化,导致多次setState只增加1而不是3。
- 异步操作不能改变正在运行的函数中的state值,定时器输出的值仍然是旧值。
- 解决方案是将下一个状态保存在变量中,然后传递给set函数。
- React会在事件处理函数结束后处理state更新,形成一个队列。
- 使用更新函数可以实现多次更新同一个state的预期结果。
➡️