⊗jsrtPmHkURf 12 of 47 menu

Hook useRef für die Arbeit mit Refs in React

In dieser Lektion werden wir mit Refs arbeiten. Zur Veranschaulichung lassen Sie uns die Funktionsweise des Hooks useRef im Vergleich zum Hook useState analysieren.

Lassen Sie uns eine Komponente mit einer Schaltfläche erstellen:

return ( <div> <button> state click </button> </div> );

Importieren wir useState in die Komponente:

import { useState } from 'react';

Und legen wir einen State state an:

const [state, setState] = useState(0);

Jetzt sorgen wir dafür, dass bei einem Klick auf die Schaltfläche unser state um 1 erhöht wird. Den State-Wert geben wir direkt im Text der Schaltfläche aus:

<button onClick={handleStateClick}> state click: {state} </button>

Beschreiben wir die Funktion für die Behandlung des Klicks auf die Schaltfläche handleStateClick:

function handleStateClick() { setState(state + 1); }

Klicken wir ein paar Mal auf die Schaltfläche und sehen, wie der State-Wert wächst.

Jetzt erstellen wir eine App-Komponente, aber verwenden nicht den State, sondern ein Ref.

Importieren wir zunächst useRef in die Komponente:

import { useRef } from 'react';

Und legen wir ein Ref ref an. Als Ergebnis gibt der Hook useRef ein Ref-Objekt mit der einzigen Eigenschaft current zurück, die für uns weiterhin interessant sein wird. Setzen wir seinen Anfangswert auf 0:

const ref = useRef(0);

Hängen wir einen Klick-Handler an die Schaltfläche. Denken Sie daran, dass wir nicht das ref selbst lesen/ändern sollen, sondern seine Eigenschaft current:

<button onClick={handleRefClick}> ref click: {ref.current} </button>

Fügen wir die Funktion für die Behandlung des Klicks auf unsere Schaltfläche hinzu. Hier werden wir current um 1 erhöhen, wie im vorherigen Beispiel mit dem State. Im Gegensatz zum State, wo die Funktion setState zur Änderung seines Wertes erforderlich ist, arbeiten wir mit der Eigenschaft des Refs direkt:

function handleRefClick() { ref.current = ref.current + 1; }

Klicken wir nun auf unsere Schaltfläche. Und was sehen wir? Beim Klick darauf bleibt es, wie ursprünglich 0, und ändert sich nicht.

Sie können natürlich anzweifeln, dass sich der Wert überhaupt ändert. Lassen Sie uns das überprüfen. Dazu fügen wir in der Funktion des Klick-Handlers eine weitere Codezeile hinzu, die den Wert current in der Konsole ausgibt:

function handleRefClick() { ref.current = ref.current + 1; console.log('ref click: ' + ref.current); }

Wenn wir jetzt die Konsole im Browser öffnen, klicken wir erneut auf die Schaltfläche und stellen sicher, dass sich der Wert tatsächlich bei jedem Klick ändert und es keinen Betrug gibt.

Jetzt sehen wir, dass sich im Gegensatz zum State die Änderung des Ref-Wertes nicht ein erneutes Rendern der Komponente auslöst. Daher sehen wir jedes Mal im Text der Schaltfläche den Anfangswert 0.

Wenn also Ihre Daten für das Rendering verwendet werden, dann speichern Sie sie im State. Wenn Sie kein Rendering benötigen, kann in einem solchen Fall die Verwendung von Refs effizienter sein.

Angenommen, in Ihrer Komponente gibt es einen Absatz mit dem Text 'text' und eine Schaltfläche. Sorgen Sie dafür, dass bei jedem Klick auf die Schaltfläche am Ende des Textes des Absatzes ein Ausrufezeichen hinzugefügt wird. Machen Sie dies mit einem State.

Erstellen Sie eine App-Komponente, aber anstelle eines States verwenden Sie nun ein Ref. Stellen Sie sicher, dass sich bei Betätigung der Schaltfläche der Text des Absatzes nicht ändert. Fügen Sie auch eine Ausgabe des Textes des Absatzes in der Konsole hinzu, öffnen Sie sie und stellen Sie sicher, dass sich der Text tatsächlich ändert.

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