React 中 setState() 为什么是异步的?
前言
不知道大家有没有过这个疑问,React 中 setState()
为什么是异步的?我一度认为 setState()
是同步的,知道它是异步的之后很是困惑,甚至期待 React 能出一个 setStateSync()
之类的 API。同样有此疑问的还有 MobX 的作者 Michel Weststrate,他认为经常听到的答案都很容易反驳,并认为这可能是一个历史包袱,所以开了一个 issue 询问真正的原因。最终这个 issue 得到了 React 核心成员 Dan Abramov 的回复,Dan 的回复表明这不是一个历史包袱,而是一个经过深思熟虑的设计。
注意:这篇文章根据 Dan 的回复写成,但不是一篇翻译。我忽略了很多不太重要的内容,Dan 的完整回复请看这里。
正文
Dan 在回复中表示为什么 setState()
是异步的,这并没有一个明显的答案(obvious answer),每种方案都有它的权衡。但是 React 的设计有以下几点考量: