this.setState 参照知乎专栏几年前的一篇文章,简单试了下。
1、正常执行的setState会保持使用Transaction事务执行,且类似【异步】
2、setTimeout后,则简化执行栈,会将非setTimeout中“缓存”的setState执行
具体代码和执行返回如下:
import React from "react"
export default class HomePage extends React.Component {
constructor(props) {
super(props);
this.state = {
val: 0
}
}
componentDidMount() {
// log 1 times
this.setState({ val: this.state.val + 100 })
console.log(this.state.val);//-->0
// log 2 times
this.setState({ val: this.state.val + 1 })
console.log(this.state.val);//-->0
setTimeout(() => {
// settimeout log 3 times
this.setState({ val: this.state.val + 1 })
console.log(this.state.val);//-->2
// setTimeout log 4 times
this.setState({ val: this.state.val + 100 })
console.log(this.state.val);//-->102
}, 0);
}
render() {
return (
<div>
it's empty
</div>
)
}
}
参考:https://zhuanlan.zhihu.com/p/20328570