Dieses Mal werde ich Ihnen den Render-Fall in React ausführlich erläutern. Was sind die Vorsichtsmaßnahmen für die Verwendung von Render in React? Das Folgende ist ein praktischer Fall.
Wir alle wissen, dass Render während der Instanziierung und Lebensdauer der Komponente ausgeführt wird. Die Instanziierung wird ausgeführt, nachdem „componentWillMount“ ausgeführt wurde. Dazu gibt es nichts zu sagen. Hier analysieren wir hauptsächlich die Ausführung lebenslanger Komponentenaktualisierungen.
Existence-Methoden umfassen:
- ComponentWillReceiveProps
- ShouldComponentUpdate
- ComponentWillUpdate
- render
- ComponentDidUpdate
Diese Methoden befinden sich in der Komponente It wird ausgeführt, wenn sich der Status oder das Attribut ändert. Wenn wir Redux verwenden, wird es nur ausgeführt, wenn sich das Attribut ändert. Im Folgenden analysieren wir die Änderungen der Attribute aus mehreren Szenarien.
Zuerst haben wir die HelloWorldComponent erstellt. Der Code lautet wie folgt:
import * as React from "react"; class HelloWorldComponent extends React.Component { constructor(props) { super(props); } componentWillReceiveProps(nextProps) { console.log('hello world componentWillReceiveProps'); } render() { console.log('hello world render'); const { onClick, text } = this.props; return ( <button onClick={onClick}> {text} </button> ); } } HelloWorldComponent.propTypes = { onClick: React.PropTypes.func, }; export default HelloWorldComponent;
Der Code der AppComponent-Komponente lautet wie folgt:
class MyApp extends React.Component { constructor(props) { super(props); this.onClick = this.onClick.bind(this); } onClick() { console.log('button click'); this.props.addNumber(); } render() { return ( <HelloWorld onClick={this.onClick} text="test"></HelloWorld> ) } } const mapStateToProps = (state) => { return { count: state.count } }; const mapDispatchToProps = { addNumber }; export default connect(mapStateToProps, mapDispatchToProps)(MyApp);
Hier verwenden wir Redux, aber den Code wird nicht gepostet, wobei die addNumber-Methode die Anzahl bei jedem Klick um 1 erhöht.
Glauben Sie, dass die Rendermethode der Untergruppe HelloWorldComponent ausgeführt wird, wenn wir zu diesem Zeitpunkt auf die Schaltfläche klicken?
Wie im Bild gezeigt, wird die Rendermethode der Unterkomponente ausgeführt, wenn wir auf die Schaltfläche klicken. Aus Code-Sicht haben sich jedoch der an die Komponente gebundene onClick und der Text nicht geändert. Warum wird die Komponente aktualisiert?
Wenn Sie dieses Protokoll zu „componentWillReceiveProps“ der Unterkomponente hinzufügen: console.log(‘isEqual’, nextProps === this.props); ist die Ausgabe wahr oder falsch?
Ja, Sie haben richtig gelesen, die Ausgabe ist falsch. Aus diesem Grund wird die Unterkomponente aktualisiert, da sich der Eigenschaftswert geändert hat, nicht der Eigenschaftswert, den wir an die Komponente gebunden haben. Jedes Mal, wenn auf die Schaltfläche geklickt wird, wird der Status geändert und die gesamte Komponente neu gerendert. Dies ist jedoch nicht das, was wir wollen, da dieses unnötige Rendering die Leistung unserer Anwendung stark beeinträchtigt.
Neben der Vererbung von Component zum Erstellen von Komponenten gibt es auch PureComponent in React. Diese Komponente kann diese Situation vermeiden. Nehmen wir einige Änderungen am Code vor und sehen uns die Auswirkungen an. Ändern Sie es wie folgt:
class HelloWorldComponent extends React.PureComponent
Was ist passiert, als Sie dieses Mal auf die Schaltfläche geklickt haben?
Obwohl „componentWillReceiveProps“ weiterhin ausgeführt wird, wird die Komponente dieses Mal nicht erneut gerendert.
Für zustandslose Komponenten sollten wir also versuchen, PureComponent zu verwenden. Es ist zu beachten, dass PureComponent sich nur auf Eigenschaftswerte konzentriert, was bedeutet, dass Änderungen an Objekten und Arrays kein Rendern auslösen.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!
Empfohlene Lektüre:
So binden Sie Klassennamen im WeChat-Applet dynamisch
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Renderfälle in React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!