Официальные документы React заявляют, что " React.PureComponent
shouldComponentUpdate()
только поверхностно сравнивает объекты", и советуют против этого, если состояние "глубокое".
Учитывая это, есть ли причина, по которой следует React.PureComponent
при создании компонентов React?
Вопросы:
React.Component
которое мы можем рассмотреть для использования React.PureComponent
?shouldComponentUpdate()
из PureComponent
выполняет только поверхностные сравнения. Если это так, нельзя ли использовать этот метод для более глубоких сравнений?React.PureComponent
shouldComponentUpdate()
пропускает обновления реквизитов для всего поддерева компонента" - означает ли это, что изменения реквизита игнорируются?Вопрос возник из чтения в этот средний блог, если это поможет.
Основное различие между React.PureComponent
и React.Component
составляет PureComponent
делает нечеткое сравнение при изменении состояния. Это означает, что при сравнении скалярных значений он сравнивает их значения, но при сравнении объектов он сравнивает только ссылки. Это помогает улучшить производительность приложения.
Вы должны пойти за React.PureComponent
, если вы можете выполнить любое из приведенных ниже условий.
forceUpdate
при изменении данныхЕсли вы используете React.PureComponent
, вы должны убедиться, что все дочерние компоненты также чисты.
есть ли влияние производительности при использовании React.component, что мы можем рассмотрите вопрос о React.PureComponent?
Да, это увеличит производительность вашего приложения (из-за неглубокого сравнения)
Я предполагаю, что compCentonentUpdate() Purecomponent выполняет только мелкие сравнения. Если это так, этот метод не может использоваться для более глубоких сравнений?
Вы правильно догадались. Вы можете использовать его, если вы удовлетворите любым из условий, упомянутых выше.
"Кроме того, React.PureComponent shouldComponentUpdate() пропускает prop обновления для всего поддерева компонента" - Означает ли это, что поддержка изменения игнорируются?
Да, изменения prop будут проигнорированы Если не удалось найти разницу в неглубоком сравнении.
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.
? Спасибо
Component
и PureComponent
имеют одно отличие PureComponent
- это то же самое, что и Component
за исключением того, что он обрабатывает для вас метод shouldComponentUpdate
.
При изменении реквизита или состояния PureComponent
будет выполнять поверхностное сравнение как реквизита, так и состояния. Component
с другой стороны, не будет сравнивать текущий реквизит и состояние со следующим из коробки. Таким образом, компонент будет перерисовываться по умолчанию всякий раз, когда должен shouldComponentUpdate
.
При сравнении предыдущих реквизитов и состояния со следующим, поверхностное сравнение проверит, что примитивы имеют одинаковое значение (например, 1 равно 1 или что true равно true) и что ссылки одинаковы между более сложными значениями javascript, такими как объекты и массивы.
Источник: https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81