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)
}
网友评论