react setState

既是同步也是异步
在事件回调和生命周期函数里面是异步

在定时器,原生dom事件,promise中是同步

一个函数里面多次异步setState:

多次次函数模式setState会合并一次

2(执行顺序) ==> 0(输出值)

class StateTest extends React.Component {

state = {
  count: 0,
}

componentDidMount() {
  this.setState({count: this.state.count + 1})
  this.setState({count: this.state.count + 1})
  console.log('[1]',this.state.count) // 2 ==> 0

  this.setState(state => ({count: state.count + 1}))
  this.setState(state => ({count: state.count + 1}))
  console.log('[2]',this.state.count) // 3 ==> 0

  setTimeout(() => {
    this.setState({count: this.state.count + 1})
    console.log('timeout', this.state.count) // 10 ==> 6

    this.setState({count: this.state.count + 1})
    console.log('timeout', this.state.count) // 12 ==> 7
  }, 0)

  Promise.resolve().then(value => {
    this.setState({count: this.state.count + 1})
    console.log('promise', this.state.count)  // 6 ==>4

    this.setState({count: this.state.count + 1})
    console.log('promise', this.state.count) // 8 ==> 5
  })
}

render() {
  const count = this.state.count
  console.log('render', count)  // 1 ==> 0   4 ==>3   5 ==>4  7 ==>5  9 ==>6  11 ==>7
  return (
    <div>
      <p>{count}</p>
    </div>
  )
}

}

posted @   木头小屋  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示