Официальным Реагировать Документы состояния, « React.PureComponent
«ы shouldComponentUpdate()
только неглубоко сравнивают объекты», и советует против этого , если состояние„глубокого“.
Учитывая это, есть ли причина, по которой следует отдавать предпочтение React.PureComponent
при создании компонентов React?
Вопросы :
- есть ли какое-то влияние на производительность,
React.Component
которое мы можем рассмотретьReact.PureComponent
? - Я предполагаю , что
shouldComponentUpdate()
изPureComponent
преформ только неглубокие сравнения. Если это так, нельзя ли использовать этот метод для более глубоких сравнений? - «Кроме того,
React.PureComponent
«sshouldComponentUpdate()
скачет проп обновления для всего компонента поддерева»- Означает ли это , что изменения проп игнорируются?
Вопрос возник из чтения в этот средний блог , если это поможет.
Ответы:
Основное различие между
React.PureComponent
иReact.Component
заключаетсяPureComponent
в поверхностном сравнении изменений состояния. Это означает, что при сравнении скалярных значений сравниваются их значения, но при сравнении объектов сравниваются только ссылки. Это помогает улучшить производительность приложения.Вы должны идти,
React.PureComponent
когда вы можете выполнить любое из следующих условий.forceUpdate
когда данные изменяютсяЕсли вы используете,
React.PureComponent
вы должны убедиться, что все дочерние компоненты также чистые.Да, это повысит производительность вашего приложения (из-за поверхностного сравнения)
Вы правильно догадались. Вы можете использовать его, если вы удовлетворяете любому из условий, упомянутых выше.
Да, изменения реквизита будут игнорироваться, если не удалось найти разницу в поверхностном сравнении.
источник
It means that when comparing scalar values it compares their values, but when comparing objects it compares only references. It helps to improve the performance of the app.
? СпасибоState/Props should not have a hierarchy
извините, вы можете немного объяснить, что здесь означает иерархия?Component
иPureComponent
есть одно отличиеPureComponent
точно так же, какComponent
за исключением того, что он обрабатываетshouldComponentUpdate
метод для вас.При изменении реквизита или состояния
PureComponent
будет проведено поверхностное сравнение как реквизита, так и состояния.Component
с другой стороны, не будет сравнивать текущие реквизиты и состояние со следующим из коробки. Таким образом, компонент будет перерисовываться по умолчанию при каждомshouldComponentUpdate
вызове.Мелкое Сравнение
При сравнении предыдущих реквизитов и состояния со следующим, поверхностное сравнение проверит, что примитивы имеют одинаковое значение (например, 1 равно 1 или что true равно true) и что ссылки одинаковы между более сложными значениями javascript, такими как объекты и массивы.
Источник: https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81
источник
Основное отличие, на мой взгляд, состоит в том, что компонент переопределяется каждый раз, когда переопределяется его родитель, независимо от того, изменились ли реквизиты и состояние компонента.
Чистый компонент, с другой стороны, не будет перерисовываться, если перерисовывается его родительский объект, если только реквизиты (или состояние) чистого компонента не изменились.
Например, допустим, что у нас есть дерево компонентов с трехуровневой иерархией: родитель, дети и внуки.
Когда реквизиты родителя меняются таким образом, что меняются реквизиты только одного потомка, то:
Иногда, однако, использование чистых компонентов не будет иметь никакого влияния. У меня был такой случай, когда родитель получил свой реквизит из магазина редуксов, и мне нужно было выполнить сложный расчет реквизита своих детей. Родитель использовал плоский список для визуализации своих потомков.
Результатом стало то, что каждый раз, когда происходило даже небольшое изменение в хранилище редуксов, весь плоский список данных детей пересчитывался. Это означало, что для каждого компонента в дереве реквизиты были новыми объектами, даже если значения не менялись.
В этом случае чистые компоненты не помогают, и повышение производительности может быть достигнуто только с помощью обычных компонентов и проверки в дочерних элементах, в shouldComponentUpdate, если требуется повторное отображение.
источник