https://juejin.im/post/5bf1444cf265da614a3a1660

api

setState(updater: object | function, callback)

setState 的‘异步’和同步

在合成事件,生命周期钩子中是“异步”的,在原生事件,setTimeout 中是同步的
这个所谓的‘异步’不是真正的异步语法而是:

  1. 将多个 setState 中的合并 (多个参数对象进行浅合并)
  2. 放到代码的最后去触发 render

setTimeout内的 setState 之所以是同步, 是因为 evenloop 机制导致的

react 为什么会出现这种“异步”现象?

react特有的处理机制,避免多次触发不必要的 render, 起到一定的性能优化作用

那么如何拿到更新后的state

  1. setState 的第二个参数 callback
  2. 在 componentDidUpdate 中去取 state

如何基于之前的 state 设置现在的 state

将 setState 的第一个参数传入函数,函数中会拿到 最新的 state 和 props

image.png