странный вопрос о shouldComponentUpdate () - PullRequest
1 голос
/ 06 апреля 2019

Я не понимаю, как метод shouldComponentUpdate () имеет доступ к старому состоянию. Как я знаю, должен быть вызван shouldComponentUpdate () после пропажа или изменения состояния.

Предположим, вы вызываете setState (), после этого текущее состояние будет изменено и будет обновлено новым состоянием.Но shouldComponentUpdate () запускается даже после обновления состояния до последней версии.Следовательно, как this.state внутри shouldComponentUpdate () может вернуть старое состояние?

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

Кто-нибудь понял?Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2019

Эта функция жизненного цикла вызывается до того, как что-либо в компоненте обновляется, включая состояние, как подчеркивает реагирующая документация.

shouldComponentUpdate () вызывается перед рендерингом при получении нового реквизита или состояния.

Таким образом, в момент времени, когда вызывается shouldComponentUpdate, новое состояние еще не применено, а this.state все еще указывает на старое состояние.

2 голосов
/ 06 апреля 2019

Самый простой способ это сделать - рендеринг запускается, когда что-то изменилось над элементом в иерархии.Если сам компонент будет визуализироваться во время этого цикла рендеринга, инициированного сверху, зависит от возвращаемого значения shouldComponentUpdate.

Если этот метод возвращает true, рендеринг будет происходить с изменением текущего состояния компонента, которое не изменялось до тех пор, пока shouldComponentUpdate не вернул true.

Следовательно, this.state внутри метода shouldComponentUpdate имеет более старое состояние и nextStateв аргументах есть последнее состояние.

...