OptimierungsideenEs gibt zwei Hauptoptimierungsrichtungen:
Bei der Verwendung von Klassenkomponenten werden hauptsächlich die folgenden React-Optimierungs-APIs verwendet: shouldComponentUpdate und PureComponent Wie optimieren wir also die Leistung funktionaler Komponenten? Zur Optimierung werden vor allem folgende Methoden eingesetzt:
Reagieren.memoSchauen wir uns ein Beispiel an: Wir fügen der übergeordneten Komponente eine Schaltfläche hinzu, um den Untertitel zu ändern und die untergeordnete Unterkomponente einzuführen. Wie Sie sehen, wird beim ersten Eintreffen der Unterkomponente console.log('Ich bin eine Unterkomponente') gedruckt. Wenn Sie zum Ändern des Untertitels klicken, wird auch die untergeordnete Komponente gedruckt, was zu unnötigen wiederholten Renderzeiten führt. //Übergeordnete Komponente importiere {useState} von 'react' importiere Child aus "./Child"; const Index = ()=>{ const [subTitle, setSubTitle] = useState('Ich bin ein Untertitel') const updateSubTitle = ()=>{ setSubTitle('Untertitel ändern') } zurückkehren ( <div> <div>Optimierung der Leistung funktionaler Komponenten</div> <div>{Untertitel}</div> <button onClick={updateSubTitle}>Untertitel ändern</button> <Kind/> </div> ); } Standardindex exportieren; //Untergeordnete Komponente Child.js const Kind = ()=>{ console.log('Ich bin eine untergeordnete Komponente') zurückkehren ( <div>Ich bin eine untergeordnete Komponente</div> ) } Standard-Untergeordnetes Element exportieren Optimieren Sie es und verwenden Sie React.memo, um die Unterkomponente zu umschließen. importiere React von „react“; const Kind = ()=>{ console.log('Ich bin eine untergeordnete Komponente') zurückkehren ( <div>Ich bin eine untergeordnete Komponente</div> ) } Standardmäßig exportieren React.memo (Kind) Beobachten Sie erneut und stellen Sie fest, dass die untergeordnete Unterkomponente nicht wiederholt gerendert wird useCallbackHier ändern wir es erneut, fügen der untergeordneten Unterkomponente ein Onclick-Ereignis hinzu, klicken dann auf die Schaltfläche „Untertitel ändern“ und stellen fest, dass unsere untergeordnete Unterkomponente erneut gerendert wird. Dies liegt hauptsächlich daran, dass die Funktion „handlerClick“ die Änderungen beim Ändern des Untertitels erneut rendert, wodurch die Unterkomponente erneut gerendert wird. // Übergeordnete Komponente const Index = ()=>{ const [subTitle, setSubTitle] = useState('Ich bin ein Untertitel') const updateSubTitle = ()=>{ setSubTitle('Untertitel ändern') } const handlerClick = ()=>{ console.log('Unterkomponentenklick') } zurückkehren ( <div> <div>Optimierung der Leistung funktionaler Komponenten</div> <div>{Untertitel}</div> <button onClick={updateSubTitle}>Untertitel ändern</button> <Untergeordnetes Element bei Klick={handlerClick}/> </div> ); } //Kind-Unterkomponente const Child = (props)=>{ console.log('Ich bin eine untergeordnete Komponente') zurückkehren ( <div> <div>Ich bin eine untergeordnete Komponente</div> <button onClick={props.onClick}>Unterkomponenten-Schaltfläche</button> </div> ) } Standardmäßig exportieren React.memo (Kind) Um die Funktion zu optimieren, verwenden Sie useCallback, um die Funktion handlerClick der untergeordneten Komponente zu umschließen. Klicken Sie erneut auf updateSubTitle, um den Untertitel zu ändern. Stellen Sie fest, dass die untergeordnete Komponente nicht erneut gerendert wird. // Übergeordnete Komponente const Index = ()=>{ const [subTitle, setSubTitle] = useState('Ich bin ein Untertitel') const updateSubTitle = ()=>{ setSubTitle('Untertitel ändern') } const handlerClick = useCallback(()=>{ console.log('Unterkomponentenklick') },[]) zurückkehren ( <div> <div>Optimierung der Leistung funktionaler Komponenten</div> <div>{Untertitel}</div> <button onClick={updateSubTitle}>Untertitel ändern</button> <Untergeordnetes Element bei Klick={handlerClick}/> </div> ); } Standardindex exportieren; Hier ist die Verwendung von useCallback const callback = () => { tuEtwas(a, b); } const memoizedCallback = useCallback(callback, [a, b]) Übergeben Sie die Funktion und Abhängigkeiten als Parameter an useCallback, das eine gespeicherte Version der Rückruffunktion zurückgibt. Dieser gespeicherte Callback wird nur aktualisiert, wenn sich die Abhängigkeiten ändern. verwendenMemouseMemo wird zum Zwischenspeichern von Berechnungsergebnissen verwendet Schauen wir uns ein Beispiel an. Wir fügen eine calcCount-Berechnungsfunktion basierend auf der vorherigen hinzu und klicken dann auf updateSubTitle, um den Untertitel zu aktualisieren. Wir stellen fest, dass calcCount neu berechnet wird, was bedeutet, dass jedes Rendern wiederholte Berechnungen verursacht. Wenn der Berechnungsumfang groß ist, wirkt sich dies erheblich auf die Leistung aus. // Übergeordnete Komponente const Index = ()=>{ const [subTitle, setSubTitle] = useState('Ich bin ein Untertitel') const updateSubTitle = ()=>{ setSubTitle('Untertitel ändern') } const handlerClick = useCallback(()=>{ console.log('Unterkomponentenklick') },[]) const calcCount = ()=>{ let totalCount = 0 für (lass i = 0; i < 10000; i++) { Gesamtanzahl + = i } console.log('Gesamtzahl',Gesamtzahl) Gesamtanzahl zurückgeben } Konstante Anzahl = calcCount() zurückkehren ( <div> <div>Optimierung der Leistung funktionaler Komponenten</div> <div>{Untertitel}</div> <button onClick={updateSubTitle}>Untertitel ändern</button> <div>Anzahl:{Anzahl}</div> <Untergeordnetes Element bei Klick={handlerClick}/> </div> ); } Optimieren Sie es und verwenden Sie useMemo, um die Berechnungsergebnisse zwischenzuspeichern. Klicken Sie erneut auf die Schaltfläche updateSubTitle, um den Untertitel zu ändern. Sie werden feststellen, dass die Funktion calcCount die Berechnung nicht mehr wiederholt. const calcCount = ()=>{ let totalCount = 0 für (lass i = 0; i < 10000; i++) { Gesamtanzahl + = i } console.log('Gesamtzahl',Gesamtzahl) Gesamtanzahl zurückgeben } Konstante Anzahl = useMemo(calcCount,[]) Abschließend sei darauf hingewiesen, dass useMemo nicht blind verwendet werden kann. Es sollte je nach bestimmten Szenarien verwendet werden. Wenn beispielsweise die Datenmenge relativ groß ist, ist es besser anwendbar. Für einige normale Berechnungen, die eine Berechnung wert sind, kann es ignoriert werden, da useMemo selbst auch etwas Leistung verbraucht. Blinde Verwendung wäre kontraproduktiv. Verweisehttps://mp.weixin.qq.com/s/YGvmSrr-yhPUNHbwlLSFsA http://www.ptbird.cn/react-hook-useMemo-purerender.html Dies ist das Ende dieses Artikels zur Leistungsoptimierung von React-Funktionskomponenten. Weitere relevante Inhalte zur Leistungsoptimierung von React finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: MySql 5.7.20 Installation und Konfiguration von Daten- und my.ini-Dateien
>>: Beispiel für die Bereitstellungsmethode „Forever+nginx“ einer Node-Site
Bei DB-Benchmarktests sind QPS und TPS wichtige I...
FOUC steht für Flash of Unstyled Content, abgekürz...
Detailliertes Beispiel einer MySQL-Austauschparti...
Ich habe erst vor Kurzem angefangen, mich mit Dat...
Inhaltsverzeichnis Was sind Refs 1. Referenzen vo...
Jeder, der schon einmal Windows Remote Desktop zu...
v-for-Richtlinie Wenn wir von Listen sprechen, mü...
„Replace“ und „Replace into“ von MySQL sind beide...
Es gibt viele Versionen der Java-Sprache. Zusätzl...
1. Mehrere Aufrufe eines einzelnen Pfeils Sobald ...
Einführung Wenn Sie mit der Verwendung von JDBC z...
HTML besteht aus Tags und Attributen, die zusamme...
1. Hintergrund 1. Das Frontend verwendet vue + vu...
Es ist sehr einfach, eine Scala-Umgebung in Linux...
Wenn es um Tool-Websites geht, haben wir zunächst...