Was sind unveränderliche Werte?Funktionale Programmierung bedeutet, dass die Funktionen und Ausdrücke im Programm wie Funktionen in der Mathematik sein können. Bei gegebenem Eingabewert ist die Ausgabe sicher. Zum Beispiel sei a = 1; sei b = a + 1; => a = 1 b = 2; Die Variable b erscheint, und obwohl der Wert der Variable a verwendet wird, wird der Wert von a nicht geändert. Schauen wir uns den Code in React an, mit dem wir vertraut sind. Wenn wir this.state = { count: 1 } initialisieren componentDidMount() { const newState = { ...Zustand, Anzahl: 2 }; // { Anzahl: 2 } dies.setState(newState); } Obwohl wir this.state verwendet haben, haben wir weder die Referenzadresse this.state geändert noch den Wert von count direkt geändert. Dasselbe gilt für this.props. Warum unveränderliche Werte verwenden?Die offizielle Website von React bietet drei Vorteile:
Durch Unveränderlichkeit lassen sich komplexe Funktionen einfacher implementieren.
Wenn Sie die Daten direkt ändern, ist es schwierig, die Änderungen zu verfolgen. Die Verfolgung von Datenänderungen erfordert, dass veränderbare Objekte mit den Versionen vor der Änderung verglichen werden können, sodass der gesamte Objektbaum einmal durchlaufen werden muss. Das Verfolgen von Änderungen an unveränderlichen Daten ist relativ einfach. Wenn wir feststellen, dass das Objekt zu einem neuen Objekt geworden ist, können wir sagen, dass das Objekt sich verändert hat.
Der Hauptvorteil der Unveränderlichkeit besteht darin, dass sie uns hilft, reine Komponenten in React zu erstellen. Wir können leicht feststellen, ob sich unveränderliche Daten geändert haben und somit wissen, wann eine Komponente neu gerendert werden muss. Die Optimierung der Reaktionsleistung ist untrennbar mit unveränderlichen Werten verbunden
Klasse CounterButton erweitert React.Component { Konstruktor(Requisiten) { super(Requisiten); dieser.Zustand = {Anzahl: 1}; } sollteComponentUpdate(nextProps, nextState) { wenn (diese.props.color !== nextProps.color) { gibt true zurück; } wenn (dieser.Zustand.Anzahl !== nächsterZustand.Anzahl) { gibt true zurück; } gibt false zurück; } rendern() { zurückkehren ( <Schaltfläche Farbe = {this.props.color} bei Klick={() => this.setState(state => ({Anzahl: state.count + 1}))}> Anzahl: {this.state.count} </button> ); } }
Wir wissen, dass die Variablentypen in JS in Basistypen (Zahl, Zeichenfolge, Boolescher Wert, undefiniert, Null, Symbol) und Referenztypen (Funktion, Objekt, Funktion) unterteilt sind. Die Werte der Basistypen werden im Stapelspeicher gespeichert, und die Werte der Referenztypen werden im Heapspeicher gespeichert. Der Stapelspeicher speichert nur Verweise auf den Heapspeicher. Beim oberflächlichen Vergleich werden nur die Daten im Stapelspeicher verglichen. Klasse App erweitert PureComponent { Zustand = { Elemente: [1, 2, 3] } handleKlick = () => { const { items } = dieser.Zustand; Elemente.pop(); this.setState({ Elemente }); } rendern() { zurückkehren ( <div> <ul> {this.state.items.map(i => <li key={i}>{i}</li>)} </ul> <button onClick={this.handleClick}>löschen</button> </div> ) } } Das obige Beispiel verwendet PureComponent und ändert nur den Wert im Elementarray, ohne die Referenzadresse der Elemente zu ändern. Daher wird davon ausgegangen, dass sich die Elemente nicht geändert haben und die Renderfunktion nicht ausgelöst wird und das Rendern der Komponente nicht ausgelöst wird. Wenn Sie Komponentenaktualisierungen durchführen möchten, können Sie wie folgt ein neues Array erstellen und den Elementen die Adresse des neuen Arrays zuweisen. handleKlick = () => { const { items } = dieser.Zustand; Elemente.pop(); var neuesItem = [...Items]; this.setState({ item: neuesElement }); }
Wenn Sie schließlich einen oberflächlichen Vergleich auf Komponentenebene durchführen möchten, können Sie die Funktion React.memo() verwenden. ZusammenfassenTatsächlich besteht der dritte und wichtigste Vorteil der Unveränderlichkeit, der auf der offiziellen Website erwähnt wird, darin, dass die Unveränderlichkeit uns helfen kann, PureComponent in React zu verwenden. Wir können leicht feststellen, ob sich Daten geändert haben und wann eine Komponente neu gerendert werden muss. Wenn wir den Wert von state ändern und shouldComponentUpdate den aktuellen state und nextState abruft oder die von props und nextProps verglichenen Werte genau gleich sind, wird false zurückgegeben. Selbst wenn wir eine setState-Operation ausführen, wird die Benutzeroberfläche nicht aktualisiert. Zur Leistungsoptimierung wird PureComponent am besten mit Immutable.js verwendet. Kombiniert mit React.memo, um unnötige Komponentenaktualisierungen und Renderings zu vermeiden. Oben finden Sie eine ausführliche Erläuterung der unveränderlichen Werte in React. Weitere Informationen zu unveränderlichen Werten in React finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der Leistungsoptimierung für MySQL-Batch-SQL-Einfügungen
In diesem Artikelbeispiel wird der spezifische Co...
1. Ziel: Ändern Sie den Wert des character_set_se...
Seit ich den Mac zurückgegeben habe, liegt mein u...
Grundlegendes dreispaltiges Layout .Container{ An...
1. Erstellen Sie mit der Methode Object.create() ...
Bearbeiten Sie docker-compose.yml und fügen Sie d...
Erstens: über Text/HTML var txt1="<h1>...
Jede Webseite hat eine Adresse, die durch eine UR...
Effektanzeige Die eingebaute Boot-Oberfläche ist ...
Wie installiere ich ISO-Dateien unter einem Linux...
Der Vorteil der Master-Slave-Synchronisierungskon...
1. Vorbereitung 1.1 Laden Sie das komprimierte To...
Inhaltsverzeichnis 1. Herunterladen 2. Bereitstel...
Im Vergleich zu gewöhnlichen Programmen haben dyn...
Mehrere gängige Paging-Methoden: 1. Rolltreppenme...