Heim > Web-Frontend > js-Tutorial > useRef verstehen: Ein Leitfaden für Anfänger

useRef verstehen: Ein Leitfaden für Anfänger

WBOY
Freigeben: 2024-09-03 13:32:32
Original
1146 Leute haben es durchsucht

Understanding useRef: A Beginners Guide

Einführung

Was ist useRef

useRef ist ein React-Hook, der es ermöglicht, eine dauerhafte Referenz auf einen Wert oder ein DOM-Element zu erstellen. Im Gegensatz zu useState, das zum Verwalten des Status verwendet wird, der erneute Renderings auslöst, wird useRef hauptsächlich für Nebeneffekte oder den direkten Zugriff auf DOM-Elemente verwendet.

Warum useRef verwenden?

Der useRef-Hook ist besonders nützlich für:

  • Direkter Zugriff auf DOM-Elemente: Sie können useRef verwenden, um einen Verweis auf ein DOM-Element abzurufen, sodass Sie es direkt bearbeiten können, ohne ein erneutes Rendern auszulösen.
  • Persistente Werte erstellen: Im Gegensatz zum Status bleiben mit useRef erstellte Werte zwischen den Renderings bestehen, was sie ideal zum Speichern von Daten macht, die keine erneuten Renderings auslösen müssen.

Den useRef-Hook verstehen

Der useRef-Hook gibt ein Objekt mit der Eigenschaft .current zurück. Wenn Sie useRef aufrufen, wird eine dauerhafte Referenz auf den Wert erstellt, den Sie als Argument übergeben. Diese Referenz wird in der .current-Eigenschaft des zurückgegebenen Objekts gespeichert.

Erstellen einer Referenz mit useRef

Um eine Referenz zu erstellen, rufen Sie einfach useRef mit dem Anfangswert auf.

import { useRef} from 'react'

const App = () => {
  const countRef = useRef(0)

  return (...)
}

export default App
Nach dem Login kopieren

Im obigen Beispiel ist countRef eine Referenz auf den Anfangswert 0.

Zugriff auf den Referenzwert

Um auf den Referenzwert zuzugreifen, rufen Sie einfach das countRef-Objekt mit der Eigenschaft .current auf

import { useRef} from 'react'

const App = () => {
  const countRef = useRef(0)

  const increment = () => {
    countRef.current++
  }

  return (
    <div>
      <p>Count: {countRef.current}</p>
      <button onClick={increment}>Increment</button>
    </div>
  )
}

export default App
Nach dem Login kopieren

Wenn Sie im obigen Beispiel auf die Schaltfläche klicken, wird die Inkrementierungsfunktion aufgerufen, die die countRef erhöht, aber die Anzahl wird nicht aktualisiert bei

Count: {countRef.current}

weil das Aktualisieren von useRef keine erneuten Renderings wie useState verursacht.

Aktualisieren Sie den Code auf das folgende Beispiel, um das erwartete Ergebnis zu erhalten.

import { useRef, useState } from 'react'

const App = () => {
  const countRef = useRef(0)
  const [count, setCount] = useState(0)

  const increment = () => {
    countRef.current++
    setCount(countRef.current)
  }

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increment}>Increment</button>
    </div>
  )
}

export default App
Nach dem Login kopieren

Häufige Anwendungsfälle für useRef

Direkter Zugriff auf und Bearbeitung von DOM-Elementen

Es ist möglich, den useRef-Hook zu verwenden, um auf die Eigenschaften von HTML-Elementen zuzugreifen und diese zu ändern

const App = () => {
  const inputRef = useRef(null)

  const handleFocus = () => {
    inputRef.current.focus()
  }

  return(
    <input ref={inputRef} />
  )
}
Nach dem Login kopieren

Beständige Werte

Im Gegensatz zu useState oder variable kann useRef Werte und Daten zwischen erneuten Renderings übergeben, z. B. zwischengespeicherte Daten oder Konfigurationseinstellungen.

Leistungsoptimierung

In manchen Fällen kann die Verwendung von useRef bei der Komponentenoptimierung helfen, indem unnötige erneute Renderings vermieden werden. Wenn Sie beispielsweise eine Komponente haben, die eine große Liste von Elementen rendert, können Sie diese mit useRef zwischenspeichern und nur die geänderten Elemente erneut rendern.

Best Practices und Überlegungen

  • Schreiben Sie nicht oder lesen Sie nicht ref.current während des Renderns
  • Sie können die Eigenschaft ref.current ändern
  • Wenn Sie die Eigenschaft ref.current ändern, rendert React Ihre Komponente nicht erneut
  • Die Informationen sind lokal für jede Kopie Ihrer Komponente (im Gegensatz zu den Variablen außerhalb, die gemeinsam genutzt werden). Sie können Informationen speichern zwischen erneuten Renderings (im Gegensatz zu regulären Variablen, die bei jedem Rendern zurückgesetzt).
  • Sie können stattdessen Refs von Event-Handlern oder Effekten lesen oder schreiben.
  • Dom mit Ref manipulieren

Übergabe einer Referenz an eine benutzerdefinierte Komponente.

Wenn Sie versuchen, einen Verweis auf diese Weise an Ihre eigene Komponente zu übergeben

const inputRef = useRef(null);

return <MyInput ref={inputRef} />;
Nach dem Login kopieren

Möglicherweise wird in der Konsole eine Fehlermeldung angezeigt:
Warnung: Funktionskomponenten können keine Referenzen zugewiesen werden. Versuche, auf diese Referenz zuzugreifen, schlagen fehl. Wollten Sie React.forwardRef() verwenden?

Um dieses Problem zu lösen, umschließen Sie die benutzerdefinierte Komponente wie folgt mit „forwardRef“:

const inputRef = useRef(null);

return <MyInput value={value} ref={inputRef} />;
Nach dem Login kopieren

Benutzerdefinierte Komponente:

import { forwardRef } from 'react';

const MyInput = forwardRef(({ value, onChange }, ref) => {
  return (
    <input
      value={value}
      onChange={onChange}
      ref={ref}
    />
  );
});

export default MyInput;
Nach dem Login kopieren

Abschluss

useRef ist ein leistungsstarker Hook, der hauptsächlich für Nebeneffekte wie das Zwischenspeichern von Daten zwischen erneuten Renderings oder den Zugriff auf Elemente des DOM verwendet wird. Es ist ein großartiges Tool zur Leistungsoptimierung und zum Erreichen spezifischer Funktionen in der React-Anwendung.

Das obige ist der detaillierte Inhalt vonuseRef verstehen: Ein Leitfaden für Anfänger. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage