经测试,setTimeout中setState也是异步了
老师您好,
1、我使用的React版本是18.2

2、setTimeout中使用setState的代码:
addClick(){
// 1、异步
// this.setState({
// count: this.state.count + 1
// }, () => {
// console.log('count by callback', this.state.count);
// });
// console.log('count', this.state.count);
// 2、setTimeout中setState是同步的吗? - 测试是异步了
setTimeout(() => {
this.setState({
count: this.state.count + 1
});
console.log('count in setTimeout', this.state.count);
}, 0);
}结果:打印的结果并不是页面最新的渲染结果

3、自定义DOM事件使用setState的代码:
bodyClickHandler(){
this.setState({
count: this.state.count + 1
})
console.log('count in body event', this.state.count);
}
componentDidMount(){
document.body.addEventListener('click', this.bodyClickHandler);
}
componentWillUnmount(){
document.body.removeEventListener('click',this.bodyClickHandler);
}结果:

是不是老版本React中是setState可能有异步和同步的情况,新版本全是异步了?
13
收起
正在回答 回答被采纳积分+1
2回答
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星