Die Antwort von @ jpdelatorre ist großartig, um allgemeine Gründe hervorzuheben, warum eine React-Komponente möglicherweise neu gerendert wird.
Ich wollte nur etwas tiefer in eine Instanz eintauchen: Wenn sich die Requisiten ändern . Die Fehlerbehebung, die dazu führt, dass eine React-Komponente erneut gerendert wird, ist ein häufiges Problem. Nach meiner Erfahrung müssen Sie häufig feststellen, welche Requisiten geändert werden, um dieses Problem aufzuspüren .
Reagieren Sie darauf, dass Komponenten neu gerendert werden, wenn sie neue Requisiten erhalten. Sie können neue Requisiten erhalten wie:
<MyComponent prop1={currentPosition} prop2={myVariable} />
oder wenn MyComponent
mit einem Redux-Speicher verbunden ist:
function mapStateToProps (state) {
return {
prop3: state.data.get('savedName'),
prop4: state.data.get('userCount')
}
}
Immer wenn der Wert prop1
, prop2
, prop3
, oder prop4
Änderungen MyComponent
werden wieder machen. Mit 4 Requisiten ist es nicht allzu schwierig herauszufinden, welche Requisiten sich ändern, indem Sie console.log(this.props)
an diesem Anfang des render
Blocks ein setzen. Bei immer komplizierteren Komponenten und immer mehr Requisiten ist diese Methode jedoch unhaltbar.
Hier ist ein nützlicher Ansatz ( zur Vereinfachung die Verwendung von lodash ), um zu bestimmen, welche Requisitenänderungen dazu führen, dass eine Komponente erneut gerendert wird:
componentWillReceiveProps (nextProps) {
const changedProps = _.reduce(this.props, function (result, value, key) {
return _.isEqual(value, nextProps[key])
? result
: result.concat(key)
}, [])
console.log('changedProps: ', changedProps)
}
Das Hinzufügen dieses Snippets zu Ihrer Komponente kann dazu beitragen, den Schuldigen aufzudecken, der fragwürdige Wiederholungen verursacht, und dies hilft häufig dabei, unnötige Daten zu ermitteln, die in Komponenten geleitet werden.
shouldComponentUpdate
automatische Komponentenaktualisierung deaktivieren und dann von dort aus Ihre Ablaufverfolgung starten. Weitere Informationen finden Sie hier: facebook.github.io/react/docs/optimizing-performance.html