React Component ИЛИ React PureComponent

Я новичок в React и хочу знать, когда мне следует использовать Компонент React, а когда - Реагировать на PureComponent?

Составная часть:

import React, { Component } from 'react'

Чистый компонент:

import React, { PureComponent } from 'react'

Могу ли я использовать React PureComponent везде?

ИЛИ ЖЕ

безопасно ли использовать shouldComponentUpdate и проверять и возвращать ложный не требуется

Я только что прочитал статью, в которой говорится, что использование чистых компонентов на самом деле приносит больше вреда, чем пользы. они рекомендуют использовать «реагировать на обновление при изменении». Насколько это правда?

Артикул: https://hackernoon.com/react-purecomponent-considered-harmful-8155b5c1d4bc

React.PureComponent реализует shouldComponentUpdate с мелким сравнением свойств и состояний. Это инструмент оптимизации, который вы можете использовать, если он вам действительно нужен. If your React component’s render() function renders the same result given the same props and state, you can use React.PureComponent for a performance boost in some cases.
Tholle 12.07.2018 16:23

@Tholle - это все равно PureComponents вредно?

Praveen Rao Chavan.G 12.07.2018 16:25

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

Tholle 12.07.2018 16:27

@tholle Я думаю, что лучше, чтобы компоненты контейнера имели PureComponents, а не компоненты более низкого уровня, потому что, если свойства и состояния не изменились, компоненты более низкого уровня в любом случае не будут достигнуты.

Praveen Rao Chavan.G 12.07.2018 16:37

Если вы еще этого не сделали, ознакомьтесь с производительностью React. Если вы будете осторожны со своими данными, React уже работает практически во всех случаях, и вам почти никогда не понадобится React.PureComponent.

mccambridge 12.07.2018 16:38

@maccambridge насчет сложных сценариев, не думаете ли вы, что использование PureComponents немного повысит производительность.

Praveen Rao Chavan.G 12.07.2018 16:41

чистый компонент делает только поверхностное сравнение. Поэтому для глубоких мутаций лучше использовать shouldComponentUpdate ().

Praveen Rao Chavan.G 12.07.2018 16:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
7
2 264
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Can I use React PureComponent everywhere?

Да, вы можете, но все больше и больше пытаетесь использовать Функциональный компонент. В случае компонента Class, сохраните его маленьким и расширьте до PureComponent или Component, если вы хотите реализовать свой собственный shouldComponentUpdate, посоветуйте сделать это, когда на минимальных несложных (вложенный глубокий массив или / и объект) реквизиты меняют потребности вашего компонента обновить.

Is it safe to use shouldComponentUpdate?

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

Упомянутый средний пост пытается продать пакет response-update-if-changed, который кажется неплохим вариантом для начала, но когда вы понимаете, что

the real problem statement is all about performance optimization (refer https://reactjs.org/docs/optimizing-performance.html)

Как избежать ненужных проверок для определения возможности обновления компонента и избежать нежелательного повторного рендеринга?

  • Передать реквизит для компонента, который, как вы знаете, является нужный для компонента и собирается менять
  • В случае, если много реквизита отправляется компоненту и на очень несколько ограниченных изменений свойств, компонент необходимо обновить и повторно рендерится, тогда вы можете очень хорошо реализовать свой собственный shouldComponentUpdate (см. Пример в приведенной выше общей ссылке оптимизации реакции). Но будьте осторожны с реквизитами, которые являются массивами и объектами, так как различать их - боль, особенно глубокие и громоздкие вложенные.
  • Используйте Функциональный (чистый и без состояния) компонент для вашего пользовательского интерфейса, в то время как для его логики представления (показать-скрыть, отсортировать и т.д.) будут присутствовать компоненты, которые будут Класс (с сохранением состояния и чистый, расширяя его до React.PureComponent), имеющий дочернюю опору как функцию; с помощью HOC, связывающего логический компонент и компонент UI
  • Используйте React Context API при попытке передать реквизиты между предком и потомком, особенно если они находятся на уровне, превышающем уровень родительского компонента для дочернего компонента.

Использование последнего метода, который полностью посвящен Расширенные шаблоны реакции, - лучший способ оптимизировать производительность и кодовую базу. Чтобы лучше понять это, обратитесь к Тупые и умные компоненты и Презентационные и контейнерные компоненты.

Спасибо за подробный ответ.

Praveen Rao Chavan.G 21.07.2018 16:12

да, конечно, почему бы и нет, в конце концов, это действительно очень вопрос.

Anush Shukla 22.07.2018 14:35
import React, { PureComponent } from 'react'
export default Class PureComponent  extends React.PureComponent{
}

import React, { Component } from 'react'
export default Class NormalComponent  extends React.Component{
}

PureComponent не имеет методов жизненного цикла

PureComponent check shallow comparison and re-render when Needed
Use Pure Component when used when primitive data types int string boolean etc,

Примечание:-

  • PureComponent не имеет методов жизненного цикла
  • Функция shouldcomponentupdate () React PureComponent только поверхностно сравнивает объекты.

Другие вопросы по теме