在React 18之前 setSate在非React事务(定时器回调 / 原生事件监听回调 / promise回调)中是同步的,而在React事务中异步,而React 18 在非React事务中setState也是异步的
//React 18 中
class App extends React.Component{
state={
count:0;
};
changeHandle =>()=>{
setTimeout(()=>{
this.setState({count:this.state.count+1});
console.log('count',this.state.count); //React 18 中第一次点击按钮打印 0
},1000)
}
render(){
const {count} = this.state;
return <button onChange={this.changeHandle}>{count}</button>
}
}
//React 18
ReactDOM.creatRoot(document.getElementById('root')).render(<App/>)
/*
** React 17
** ReactDOM.render(<App/>,document.getElementById('root'));
*/