setState同步与异步的问题

96 阅读1分钟

state = {    num: 123,  }
 componentDidMount() {    setTimeout(() => {      this.setState({       num: 234      } )      console.log(this.state.num);//打印234  在这定时器里面setState为同步的    }, 1000)  }

componentDidMount() {    //this.setState({    //   num: 234     // } )     // console.log(this.state.num); //打印 123  因为在这this.setState 为异步方法,非阻塞。所以可以执行这个打印方法。打印的是上面定义的数据   this.setState({       num: 234      } ,()=>{
   //但是可以在成功的回调里面打印输出,这样就可以得到更新后的数据了
   console.log(this.state.num);//打印234  })     }

setState 在自身的生命周期钩子函数,react中绑定的事件(如onClick方法实际上是react里面封装好的方法)里面是异步的,在不是自身的函数(比如定时器)里面是同步的。