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里面封装好的方法)里面是异步的,在不是自身的函数(比如定时器)里面是同步的。