1、setState异步更新
- 我们都知道,
React
通过this.state
来访问state
,通过this.setState()
方法来更新state
。当this.setState()
方法被调用的时候,React
会重新调用render
方法来重新渲染UI
- 首先如果直接在
setState
后面获取state
的值是获取不到的。在React
内部机制能检测到的地方,setState
就是异步的;在React
检测不到的地方,例如setInterval
,setTimeout
,setState
就是同步更新的
因为
setState
是可以接受两个参数的,一个state
,一个回调函数。因此我们可以在回调函数里面获取值
setState
方法通过一个队列机制实现state
更新,当执行setState
的时候,会将需要更新的state
合并之后放入状态队列,而不会立即更新this.state
- 如果我们不使用
setState
而是使用this.state.key
来修改,将不会触发组件的re-render
。 - 如果将
this.state
赋值给一个新的对象引用,那么其他不在对象上的state
将不会被放入状态队列中,当下次调用setState
并对状态队列进行合并时,直接造成了state
丢失