Le fonctionnaire React docs Etat qui « React.PureComponent
est shouldComponentUpdate()
seulement compare les objets » peu profondément, et conseille contre ce si l' état est « profond ».
Compte tenu de cela, y a-t-il une raison pour laquelle on devrait préférer React.PureComponent
lors de la création de composants React?
Questions :
- y a-t-il un impact sur les performances
React.Component
que nous pourrions envisager d' utiliserReact.PureComponent
? - Je devine
shouldComponentUpdate()
dePureComponent
fonction fonctionne uniquement des comparaisons peu profondes. Si tel est le cas, cette méthode ne peut-elle pas être utilisée pour des comparaisons plus approfondies? - "De plus,
React.PureComponent
sshouldComponentUpdate()
ignore les mises à jour des accessoires pour l'ensemble du sous-arbre du composant" - Cela signifie-t-il que les modifications des accessoires sont ignorées?
La question a surgi de la lecture de ce blog moyen , si cela aide.
Réponses:
La principale différence entre
React.PureComponent
etReact.Component
estPureComponent
une comparaison superficielle des changements d'état. Cela signifie que lors de la comparaison de valeurs scalaires, il compare leurs valeurs, mais lors de la comparaison d'objets, il ne compare que les références. Cela permet d'améliorer les performances de l'application.Vous devez choisir
React.PureComponent
quand vous pouvez satisfaire l'une des conditions ci-dessous.forceUpdate
lorsque les données changentSi vous utilisez,
React.PureComponent
vous devez vous assurer que tous les composants enfants sont également purs.Oui, cela augmentera les performances de votre application (en raison d'une comparaison superficielle)
Vous l'avez deviné correctement. Vous pouvez l'utiliser si vous remplissez l'une des conditions que j'ai mentionnées ci-dessus.
Oui, les changements d'accessoires seront ignorés s'il ne peut pas trouver de différence dans une comparaison superficielle.
la source
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.
? MerciState/Props should not have a hierarchy
désolé, pouvez-vous expliquer un peu ce que la hiérarchie signifie ici?Component
etPureComponent
avoir une différencePureComponent
est exactement la même queComponent
sauf qu'il gère lashouldComponentUpdate
méthode pour vous.Lorsque les accessoires ou l'état changent,
PureComponent
fera une comparaison superficielle des accessoires et de l'état.Component
d'autre part, ne comparera pas les accessoires et l'état actuels au prochain prêt à l'emploi. Ainsi, le composant sera rendu de nouveau par défaut à chaqueshouldComponentUpdate
appel.Comparaison superficielle
Lorsque vous comparez les accessoires et l'état précédents au suivant, une comparaison superficielle vérifiera que les primitives ont la même valeur (par exemple, 1 est égal à 1 ou que true est égal à true) et que les références sont les mêmes entre des valeurs javascript plus complexes comme des objets et des tableaux.
Source: https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81
la source
La principale différence, à mon avis, est qu'un composant se redirige à chaque fois que ses parents se redirigent, que les accessoires et l'état du composant aient changé.
Un composant pur, en revanche, ne sera pas rendu à nouveau si ses parents sont rendus, à moins que les accessoires (ou l'état) du composant pur n'aient changé.
Par exemple, disons que nous avons une arborescence de composants avec une hiérarchie à trois niveaux: parent, enfants et petits-enfants.
Lorsque les accessoires du parent sont modifiés de manière à ce que les accessoires d'un seul enfant soient modifiés, alors:
Parfois, cependant, l'utilisation de composants purs n'aura aucun impact. J'ai eu un tel cas lorsque le parent a reçu ses accessoires d'un magasin redux et devait effectuer un calcul complexe des accessoires de ses enfants. Le parent a utilisé une liste plate pour rendre ses enfants.
Le résultat a été que chaque fois qu'il y avait même un petit changement dans le magasin redux, l'ensemble complet des listes de données des enfants à plat a été recalculé. Cela signifiait que pour chaque composant de l'arborescence, les accessoires étaient de nouveaux objets, même si les valeurs ne changeaient pas.
Dans ce cas, les composants purs n'aident pas, et l'augmentation des performances ne peut être obtenue qu'en utilisant des composants réguliers et en archivant les enfants, dans shouldComponentUpdate, si un nouveau rendu est nécessaire.
la source