setState是同步的仍是異步的

setState 只在合成事件和鉤子函數中是「異步」的,在原生事件和 setTimeout 中都是同步的。

合成事件:就是react 在組件中的onClick等都是屬於它自定義的合成事件
原生事件:好比經過addeventListener添加的,dom中的原生事件
如下爲同步拿到數據

在setState中的回調函數中拿到react

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

在setTimeOut中拿到dom

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)
}
相關文章
相關標籤/搜索