执行时机
React的setState
并不保证是同步执行的,但是也不一定就是异步执行的,准确的说是利用了队列来模拟异步执行,并没有用到任务的异步API。这篇文章分析了setState
的执行机制,帮助我理解setState
的执行时机有很大帮助。
先放下结论:
setState
的实现并没有涉及到任何的异步API- 真正更新组件
state
的是flushBatchedUpdates
函数,而setState
不一定会调用这个函数,有可能多次setState
调用一次这个函数 setState
会不会立刻更新state
取决于调用setState
时是不是已经处于批量更新事务中。- 组件的生命周期函数和绑定的事件回调函数都是在批量更新事务中执行的。
延迟调用
在componentDidMount
生命周期中执行setState
:
export default class Index extends React.Component {
constructor(props) {
super(props);
this.state = {
val: 0
};
}
componentDidMount() {
this.setState({ val: this.state.val