乐趣区

关于react.js:setState是同步的还是异步的

setState 只在合成事件和钩子函数中是“异步”的,在原生事件和 setTimeout 中都是同步的。

合成事件:就是 react 在组件中的 onClick 等都是属于它自定义的合成事件
原生事件:比方通过 addeventListener 增加的,dom 中的原生事件
以下为同步拿到数据

在 setState 中的回调函数中拿到

this.setState({count: this.state.count + 1},()=>{console.log(this.state.count)}) 

在 setTimeOut 中拿到

setTimeout(()=>{this.setState({count:this.state.count})
      console.log(this.state.count)
    },0) 

在原生事件中批改状态

state = {count:0};
componentDidMount() {document.body.addEventListener('click', this.changeVal, false);
}
changeVal = () => {
    this.setState({number: 1})
    console.log(this.state.count)
}
退出移动版