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
Als ich kürzlich an einem System zur Gesundheitse...
1. Code der Multiheader-Tabelle Code kopieren Der ...
Inhaltsverzeichnis Problembeschreibung: Ursachena...
Charakter Dezimal Zeichennummer Entitätsname --- ...
--1. Erstellen Sie eine neue Gruppe und einen neu...
Da jedermanns Zeit kostbar ist, werde ich die Pro...
Fehler beim Flackern des CSS-Hintergrundbilds in ...
Hintergrund Alles begann, als ein Klassenkamerad ...
Inhaltsverzeichnis Stellen Sie nginx auf Server1 ...
Hier sind zwei Terminal-Split-Screen-Tools: scree...
Gestern, als ich die Funktion zum Hochladen von B...
Inhaltsverzeichnis 1. Ref und reaktiv 1. reaktiv ...
Inhaltsverzeichnis 1. Einleitung: 2. Vererbung de...
Hintergrund Das Abrufen des langsamen Abfrageprot...
MySQL-Escape Escape bedeutet die ursprüngliche Se...