setTimeout 里仍然异步
来源:7-12 setState何时会合并state
要啥要啥自行车
2022-06-29
老师,我自己写的在 setTimeout 里和 DOM 事件里的 setState,为什么还是异步的呀?这个和React 版本有关系吗
"react": “^18.2.0”,
import React from "react";
class StateDemo extends React.Component {
constructor(props) {
super(props);
// 1. state 要在构造函数中定义
this.state = {
count: 0
}
}
render() {
return (
<div>
<p>{this.state.count}</p>
<button onClick={this.handleClick}>increase</button>
</div>
)
}
handleClick = () => {
// 3. 同步或异步
// 直接调用是异步
// setTimeout 中 setState 是同步的
setTimeout(() => {
this.setState({
count: this.state.count + 1
}, () => {
console.log('cb', this.state.count) // 回调里可以拿到最新值,点一次后是1
})
console.log('after',this.state.count) // 但我实际测试,这里还是0
}, 0)
}
componentDidMount() {
// 原生 DOM 事件中,是同步的
document.body.addEventListener('click', () => {
this.setState({
count: this.state.count + 1
})
console.log('count in body event',this.state.count) // 实际测试这里还是0
})
}
}
export default StateDemo;
写回答
2回答
-
有关系。
React 18 在这块做了调整,setTimeout 和 DOM 事件中的 setState 也都成了异步的了。
关于这块我正在准备升级内容补充。
032022-06-30 -
qq_艾诺_
2022-09-09
react18更新了,setState都是异步的了。
00
相似问题