"出于性能考虑,React 可能会把多个
setState()
调用合并成一个调用"
也就是说,当你调用setState更新状态时,状态内部不会立马更新,而是等你调用好几次setState后,再将你所有更新的状态值一起更新
“所以你不要依赖他们的值来更新下一个状态。”
例如:
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
上面的代码可能会无法更新计数器!
“要解决这个问题,可以让
setState()
接收一个函数而不是一个对象。这个函数用上一个 state 作为第一个参数,将此次更新被应用时的 props 做为第二个参数:”
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));