React 的 state 机制,主要参考 State and Lifecycle。
其中最值得注意的一点是:setState
函数是异步的,并不是同步的。官方文档有详述这个内容,但是这个 API 的名字和使用方式,很容易让人觉得是同步的。这会导致很多难以发现的 bug。比如文档 这一节 中的例子,告诉我们更新 state 时不要依赖于原有的 state / props 值:
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
MobX 针对这个问题提出了解决办法。
了解完 MobX 的原理后,再读下 3 Reasons why I stopped using React.setState - Michel Weststrate 中的相关部分。