1

我不明白 shouldComponentUpdate() 方法如何访问旧状态,据我所知, shouldComponentUpdate() 在道具或状态更改后被触发。

假设您调用 setState() ,之后当前状态将被更改并将更新为新状态。但是即使在将状态更新到最新版本之后也会触发 shouldComponentUpdate()。因此, shouldComponentUpdate() 中的“this.state”如何返回旧状态?

shouldComponentUpdate(nextProps, nextState) {
   console.log(this.state); // how can this be old state?
}

有人有想法吗?非常感谢。

4

2 回答 2

3

在组件上的任何内容更新之前调用此生命周期函数,包括响应文档强调的状态。

当接收到新的道具或状态时,应该在渲染之前调用 shouldComponentUpdate()。

所以在shouldComponentUpdate调用的那一刻,新的状态还没有被应用,this.state仍然指向旧的状态。

于 2019-04-06T16:12:23.070 回答
2

最简单的表达方式是 - 当元素上方的某些内容在层次结构中发生变化时触发渲染。组件本身是否会在上面发起的这个渲染周期内渲染,取决于 shouldComponentUpdate 的返回值。

如果此方法返回 true,则渲染将更改组件的当前状态,直到 shouldComponentUpdate 返回 true 时才会更改。

因此, shouldComponentUpdate 方法中的 this.state 具有较旧的状态,而参数中的 nextState 具有最新的状态。

于 2019-04-06T16:14:06.790 回答