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)
}
相关文章
相关标签/搜索