O funcionário Reagir docs afirmam que " React.PureComponent
é shouldComponentUpdate()
única superficialmente compara os objetos", e aconselha contra esta se o estado é 'profunda'.
Diante disso, existe alguma razão pela qual se deve preferir React.PureComponent
ao criar componentes React?
Perguntas :
- existe algum impacto no desempenho
React.Component
que possamos considerarReact.PureComponent
? - Eu estou supondo que
shouldComponentUpdate()
dePureComponent
realiza apenas comparações superficiais. Se for esse o caso, esse método não pode ser usado para comparações mais profundas? - "Além disso,
React.PureComponent
'sshouldComponentUpdate()
salta sustentar atualizações para toda a sub componente" - isso significa que mudanças prop são ignorados?
Surgiu uma questão de ler neste blog médio , se ajudar.
Respostas:
A principal diferença entre
React.PureComponent
eReact.Component
éPureComponent
faz uma comparação superficial na mudança de estado. Isso significa que, ao comparar valores escalares, ele compara seus valores, mas, ao comparar objetos, compara apenas referências. Isso ajuda a melhorar o desempenho do aplicativo.Você deve procurar
React.PureComponent
quando puder satisfazer qualquer uma das condições abaixo.forceUpdate
quando os dados forem alteradosSe você estiver usando
React.PureComponent
, verifique se todos os componentes filhos também são puros.Sim, isso aumentará o desempenho do seu aplicativo (devido a uma comparação superficial)
Você adivinhou corretamente. Você pode usá-lo se atender a qualquer uma das condições mencionadas acima.
Sim, as alterações de suporte serão ignoradas Se não for possível encontrar diferença na comparação superficial.
fonte
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.
:? ObrigadoState/Props should not have a hierarchy
desculpe, você pode explicar um pouco o que significa hierarquia aqui?Component
ePureComponent
tem uma diferençaPureComponent
é exatamente o mesmo que,Component
exceto que ele lida com oshouldComponentUpdate
método para você.Quando os adereços ou o estado mudarem,
PureComponent
fará uma comparação superficial entre os adereços e o estado.Component
por outro lado, não comparará os adereços atuais e o estado com o próximo fora da caixa. Assim, o componente será renderizado novamente por padrão sempre queshouldComponentUpdate
for chamado.Comparação superficial
Ao comparar adereços anteriores e estado para o próximo, uma comparação superficial verificará se as primitivas têm o mesmo valor (por exemplo, 1 é igual a 1 ou se verdadeiro é verdadeiro) e se as referências são as mesmas entre valores javascript mais complexos, como objetos e matrizes.
Fonte: https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81
fonte
A principal diferença, a meu ver, é que um componente é renderizado novamente toda vez que seu pai é renderizado novamente, independentemente de os props e o estado do componente terem sido alterados.
Um componente puro, por outro lado, não será renderizado novamente se seus pais forem renderizados novamente, a menos que os props (ou estado) do componente puro tenham sido alterados.
Por exemplo, digamos que temos uma árvore de componentes com uma hierarquia de três níveis: pai, filhos e netos.
Quando os adereços dos pais são alterados de uma maneira que os adereços de apenas um filho são alterados, então:
Às vezes, no entanto, o uso de componentes puros não terá nenhum impacto. Tive um caso desse tipo em que os pais receberam seus acessórios de uma loja redux e precisaram realizar um cálculo complexo dos acessórios de seus filhos. O pai usou uma lista plana para renderizar seus filhos.
O resultado foi que sempre que houve uma pequena alteração no repositório redux, toda a matriz plana dos dados das crianças foi recalculada. Isso significava que, para cada componente da árvore, os objetos eram novos objetos, mesmo que os valores não mudassem.
Nesse caso, os componentes puros não ajudam, e o aumento de desempenho pode ser alcançado apenas usando componentes regulares e verificando os filhos, em shouldComponentUpdate, se for necessário um novo renderizador.
fonte