Сколько стоит поверхностное сравнение с Pure Component и setState? - PullRequest
1 голос
/ 01 декабря 2019

При изучении чистых компонентов я не смог понять, как выполняется поверхностное сравнение между сложными объектами, например, объектом состояния.

В примере метод setTimeout использовался для обновления простого значениянапример, номер счетчика в объекте состояния, но значение было просто установлено на существующее значение. Насколько я понимаю, setState создает новый объект и не изменяет исходное состояние.

Таким образом, при поверхностном сравнении не было бы 2 разных объектов состояния, указывающих на 2 разные ссылки, даже если они содержат простое свойство с одинаковым значением, поэтому сравнение всегда должно показывать объекты как разные, ноВ примере сказано, что поскольку значения одинаковы, компонент не будет повторно отображаться, поэтому поверхностное сравнение не просто смотрит на ссылку на объект?

1 Ответ

0 голосов
/ 01 декабря 2019

Согласно документации, shallowCompare Выполняет равенство, перебирая ключи на объекте и возвращая false, когда любой ключ имеет значения, которые не являются строго равными между аргументами. Возвращает true, когда значения всех ключей строго равны. Так что он не будет проверять ссылку на объект состояния. Он проверит атрибуты объекта состояния.

  1. https://reactjs.org/docs/shallow-compare.html
  2. https://github.com/facebook/fbjs/blob/e85f39ae37e9650191e832c1d1ed8f02c272e9d1/packages/fbjs/src/core/shallowEqual.js#L39-L67
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...