La réponse de @ jpdelatorre est excellente pour mettre en évidence les raisons générales pour lesquelles un composant React pourrait être rendu à nouveau.
Je voulais juste me plonger un peu plus dans un cas: quand les accessoires changent . Le dépannage de ce qui provoque le rendu d'un composant React est un problème courant, et d'après mon expérience, la plupart du temps, le suivi de ce problème implique de déterminer quels accessoires changent .
Les composants React sont rendus à nouveau chaque fois qu'ils reçoivent de nouveaux accessoires. Ils peuvent recevoir de nouveaux accessoires comme:
<MyComponent prop1={currentPosition} prop2={myVariable} />
ou si MyComponent
est connecté à un magasin redux:
function mapStateToProps (state) {
return {
prop3: state.data.get('savedName'),
prop4: state.data.get('userCount')
}
}
Chaque fois que la valeur de prop1
, prop2
, prop3
ou les prop4
changements MyComponent
seront réengendrer. Avec 4 accessoires, il n'est pas trop difficile de savoir quels accessoires changent en plaçant un console.log(this.props)
à ce début du render
bloc. Cependant, avec des composants plus compliqués et de plus en plus d'accessoires, cette méthode est intenable.
Voici une approche utile (en utilisant lodash pour plus de commodité) pour déterminer quels changements d'accessoires entraînent le nouveau rendu d'un composant:
componentWillReceiveProps (nextProps) {
const changedProps = _.reduce(this.props, function (result, value, key) {
return _.isEqual(value, nextProps[key])
? result
: result.concat(key)
}, [])
console.log('changedProps: ', changedProps)
}
L'ajout de cet extrait de code à votre composant peut aider à révéler le coupable à l'origine de ré-rendus douteux, et cela permet souvent de faire la lumière sur les données inutiles acheminées vers les composants.
shouldComponentUpdate
pour désactiver la mise à jour automatique des composants, puis démarrer votre trace à partir de là. Plus d'informations peuvent être trouvées ici: facebook.github.io/react/docs/optimizing-performance.html