React componentDidUpdate: проверить влажное состояние ИЛИ изменение реквизита вызвало обновление? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть список компонентов с большим количеством записей, которые поступают из реквизита, который поступает из магазина Redux.Записи конвертируются, фильтруются и переводятся в состояние в componentDidUpdate.Но эта функция также вызывается, когда изменяется внутреннее состояние компонента.

Так что я проверяю прямо сейчас при каждом изменении состояния, изменились ли записи из реквизита.Это кажется мне совершенно ненужным, потому что иногда отличается только одна запись, и весь список необходимо сравнить с предыдущей.

Как я могу получить что-то вроде componentDidUpdate только для реквизита?

Я думал об использовании getDerivedStateFromProps(), но там написано

Этот метод существует для редких случаев использования, когда состояние зависит от изменений реквизита с течением времени.

Разве это не подходит для моего варианта использования?Я просто не вижу в этом редкости.

Тогда они дают совет использовать памятку для решения этой проблемы.Но тогда инфраструктура запоминания все еще должна проверить реквизит на предмет различий, насколько я понимаю.

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вы можете использовать shouldComponentUpdate (nextProps, nextState) для сравнения реквизитов

Используйте shouldComponentUpdate (), чтобы сообщить React, если на выход компонента не влияет текущее изменение состояния или параметров. Поведение по умолчанию заключается в повторном рендеринге при каждом изменении состояния, и в подавляющем большинстве случаев вы должны полагаться на поведение по умолчанию.

shouldComponentUpdate () вызывается перед рендерингом, когда новый реквизит или состояние принимаются. По умолчанию true. Этот метод не называется для начального рендеринга или при использовании forceUpdate ().

0 голосов
/ 30 апреля 2019

shouldComponentUpdate () вызывается после завершения цикла монтирования, а не при первом вызове componentWillMount () перед рендерингом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...