⊗jsrtPmHkAMe 15 of 47 menu

API memo in React

Bevor wir den nächsten Hook betrachten, müssen wir auch die nützliche API memo erwähnen, die uns hilft, ein erneutes Rendern einer Komponente zu vermeiden, wenn ihre Props unverändert bleiben.

Lassen Sie uns dies an einem Beispiel verdeutlichen. Wir erstellen eine Komponente App, die zwei Eingabefelder hat, in die, nehmen wir an, Vorname und Nachname eingegeben werden:

return ( <div> <label> name: <input value={name} onChange={(e) => setName(e.target.value)} /> </label> <br /> <label> surname: <input value={surn} onChange={(e) => setSurn(e.target.value)} /> </label> </div> );

Fügen wir am Anfang der Komponente States für sie hinzu:

const [name, setName] = useState(''); const [surn, setSurn] = useState('');

Erstellen wir noch eine Kindkomponente Child.js, sie soll eine Begrüßung ausgeben, in der der eingegebene Vorname angezeigt wird. Außerdem wird in der Konsole ein String 'child render' bei jedem Rendern dieser Komponente ausgegeben:

function Child({ name }) { console.log('child render'); return <h3>Hello {name}!</h3>; }

Fügen wir Child im Markup der Hauptkomponente nach dem letzten Eingabefeld hinzu und übergeben ihm den Vornamen als Prop:

<Child name={name} />

Importieren wir sie in die Hauptkomponente:

import Child from './Child';

Und jetzt öffnen wir die Konsole und geben in die Eingabefelder Vorname und Nachname ein. Hier werden wir sehen, dass selbst bei der Eingabe von Zeichen in das Feld für den Nachnamen, unsere Kindkomponente jedes Mal neu gerendert wird. Kein Problem, es ist ja nur eine kleine Komponente. Stellen Sie sich aber vor, wenn diese Komponente eine große Datenmenge anzeigen würde und dabei jedes Mal neu gerendert werden müsste.

Und jetzt wickeln wir die Kindkomponente in memo ein und schauen, wie sich das Rendering verändert. Zuerst importieren wir memo in sie:

import { memo } from 'react';

Dann erstellen wir eine neue Variable und weisen ihr unser Child zu, eingewickelt in memo. Wir erhalten folgenden Funktionsausdruck:

const Child = memo( function Child({ name }) { console.log('child render'); return <h3>Hello {name}!</h3>; });

Wir öffnen die Konsole und geben wieder Vorname und Nachname in die Felder ein. Jetzt sehen wir, dass bei der Eingabe des Nachnamens unsere Kindkomponente nicht neu gerendert wird.

Man muss sich merken, dass dies nicht funktionieren wird, wenn sich bei unveränderten Props die von der Komponente verwendeten States ändern oder der Kontext, der Änderungen verwendet.

Nehmen Sie den Code der Komponente App, den wir in dieser Lektion erstellt haben, lassen Sie darin nur das erste Eingabefeld. Erstellen Sie eine React Komponente Text, die einen Absatz mit dem Text 'long text' enthält, und platzieren Sie sie in App nach dem Eingabefeld.

Fügen Sie in der Komponente Text die Zeile console.log('text render'); hinzu. Stellen Sie sicher, dass bei der Eingabe von Zeichen in das Eingabefeld die Komponente Text jedes Mal neu gerendert wird.

Und jetzt wickeln Sie die Komponente Text in memo ein. Stellen Sie sicher, dass bei der Eingabe von Zeichen in das Eingabefeld die Komponente Text nicht erneut gerendert wird.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen