为什么我在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的预期结果。
➡️

继续阅读