MISE À JOUR 25.10.2018
Depuis React 16.6, vous pouvez utiliser React.memo pour les composants fonctionnels afin d'éviter un nouveau rendu, de manière similaire à PureComponent
pour les composants de classe :
const MyComponent = React.memo((props) => {
return (
/* markup */
);
});
De plus, memo ne optimisation interne .
Et contrairement à une implémentation de composant d'ordre supérieur de type userland memo(), celle intégrée à React peut être plus efficace en évitant une couche de composant supplémentaire. Citation en bloc
ANCIENNE RÉPONSE
Oui, ils refont toujours le rendu 1 (sauf si vous utilisez React.memo comme expliqué ci-dessus) si setState()
est appelé dans le composant lui-même ou dans l'un de ses parents, car les composants fonctionnels sans état ne portent pas d'icône shouldComponentUpdate . En fait, chaque composant React est rendu à nouveau. 1 à moins qu'ils ne mettent en œuvre shouldComponentUpdate
.
Il est important de noter que en appelant render()
ne signifie pas que les nœuds du DOM sont manipulés de quelque façon que ce soit. . Le site render
sert juste la méthode algorithme de différenciation pour décider quels DOM Nodes doivent vraiment être attachés / détachés. Notez que render()
n'est pas coûteux, ce sont les manipulations du DOM qui le sont. . Ils ne sont exécutés que si render()
renvoie des arbres virtuels différents.
De la part de React documentation
Juste pour être clair, rerender dans ce contexte signifie appeler render pour tous les composants, cela ne signifie pas que React va les démonter et les remonter. Il va seulement appliquer les différences en suivant les règles énoncées dans les sections précédentes.
Ne t'inquiète pas et laisse render()
soit appelé, sauf si votre composant est énorme, alors il est préférable d'utiliser un composant à état qui implémente shouldComponentUpdate()
.
Regardez aquí pour une discussion intéressante.
1 signifie que render()
du composant est appelée, et non que le nœud DOM sous-jacent est manipulé.