Zusammenfassung einiger gängiger Verwendungen von Refs in React

Zusammenfassung einiger gängiger Verwendungen von Refs in React

Was sind Refs

Refs bieten uns eine Möglichkeit, auf DOM-Knoten oder React-Elemente zuzugreifen, die in der Rendermethode erstellt wurden.
Ref-Weiterleitung ist eine Technik, bei der Refs automatisch durch Komponenten an ihre untergeordneten Elemente weitergegeben werden. Häufig verwendete Tools zum Abrufen von DOM-Knoten oder React-Elementinstanzen. Refs in React bieten eine Möglichkeit, Benutzern den Zugriff auf DOM-Knoten oder React-Elemente zu ermöglichen, die in der Rendermethode erstellt wurden.

Schiedsrichter

Die Ref-Weiterleitung ist eine optionale Funktion, die es bestimmten Komponenten ermöglicht, einen Ref zu empfangen und ihn an untergeordnete Komponenten weiterzugeben (mit anderen Worten „weiterzuleiten“).

Standardmäßig können Sie das Ref-Attribut nicht für Funktionskomponenten verwenden, da diese keine Instanzen haben:

1. String-Referenzen

Aufgrund einiger Probleme mit String-Referenzen wird die Verwendung dieser Methode nicht empfohlen. Es ist veraltet und wird möglicherweise in einer zukünftigen Version entfernt.

importiere React von „react“;
// Übergeordnete Komponente exportiert Standardklasse StringRef erweitert React.PureComponent {
  componentDidMount() {
    console.log("stringRefDom:", this.refs.stringRefDom);
    console.log("stringRefComp:", this.refs.stringRefComp);
  }
  rendern() {
    zurückkehren (
      <div>
        {/*So verwenden Sie native Komponenten*/}
        <div ref={"stringRefDom"}>stringRefDom</div>
        {/*So verwenden Sie die Klassenkomponente*/}
        <StringRefComp ref={"stringRefComp"} />
      </div>
    );
  }
}
//Klassenkomponente class StringRefComp extends React.PureComponent {
  rendern() {
    Gibt den StringRefComp zurück.
  }
}

2. Rückrufreferenzen

  • Wenn die Ref-Callbackfunktion als Inline-Funktion definiert ist, wird sie während des Aktualisierungsvorgangs zweimal ausgeführt.
  • Beim ersten Mal ist der Parameter null, beim zweiten Mal wird das Parameter-DOM-Element übergeben
  • Dies liegt daran, dass bei jedem Rendern eine neue Instanz der Funktion erstellt wird, sodass React den alten Verweis löscht und den neuen festlegt.
  • Das obige Problem kann vermieden werden, indem die Rückruffunktion von ref als gebundene Funktion der Klasse definiert wird.
  • Aber meistens ist es irrelevant
importiere React von „react“;
// Übergeordnete Komponente exportiert Standardklasse CallbackRef erweitert React.PureComponent {
  Konstruktor(Requisiten) {
    super(Requisiten);
    this.callbackRefDom = null;
    this.callbackRefComp = null;
  }
  componentDidMount() {
    console.log("callbackRefDom:", this.callbackRefDom);
    console.log("callbackRefComp:", this.callbackRefComp);
  }
  //Rückruffunktion setCallbackRefDom = (ref) => {
    dies.callbackRefDom = ref;
  };
  setCallbackRefComp = (ref) => {
    dies.callbackRefComp = ref;
  };
  //Rückruffunktion render() {
    zurückkehren (
      <div>
        <div ref={this.setCallbackRefDom}>RückrufRefDom</div>
        <CallbackRefComp ref={this.setCallbackRefComp} />
      </div>
    );
  }
}

//Klassenkomponente class CallbackRefComp extends React.PureComponent {
  rendern() {
    returniere <div>callbackRefComp</div>;
  }
}

Reagieren.createRef()

  • Einführung von React 16.3
  • In früheren Versionen von React werden Callback-Referenzen empfohlen.
importiere React von „react“;
// Übergeordnete Komponente exportiert Standardklasse CreateRef erweitert React.PureComponent {
  Konstruktor(Requisiten) {
    super(Requisiten);
    dies.createRefDom = React.createRef();
    dies.createRefComp = React.createRef();
  }
  componentDidMount() {
    Konsole.log("createRefDom:", dies.createRefDom.current);
    Konsole.log("createRefComp:", dies.createRefComp.current);
  }
  rendern() {
    zurückkehren (
      <div>
        <div ref={this.createRefDom}>RefDom erstellen</div>
        <RefComp erstellen ref={this.createRefComp} />
      </div>
    );
  }
}
//Klassenkomponente class CreateRefComp extends React.PureComponent {
  rendern() {
    Geben Sie <div>CreateRefComp</div> zurück.
  }
}

4. useRef

  • Hooks sind ein neues Feature in React 16.8
importiere React, { useEffect } von "react";
// Übergeordnete Komponente const UseRef = React.memo(() => {
  // // Sie können auch // const createRefDom = React.createRef(); verwenden.
  // const createRefComp = React.createRef();
  const createRefDom = React.useRef();
  const createRefComp = React.useRef();
  useEffect(() => {
    Konsole.log("useRefDom:", createRefDom.current);
    Konsole.log("useRefComp:", createRefComp.current);
  }, []);
  zurückkehren (
    <div>
      <div ref={createRefDom}>useRefDom</div>
      <UseRefComp ref={createRefComp} />
    </div>
  );
});

Standard-UseRef exportieren;

//Klassenkomponente class UseRefComp extends React.PureComponent {
  rendern() {
    return <div>useRefComp</div>;
  }
}

5. Refs und Funktionskomponenten

  • Standardmäßig können Sie das Ref-Attribut nicht für Funktionskomponenten verwenden, da diese keine Instanzen haben.
  • Wenn Sie ref in einer Funktionskomponente verwenden möchten, können Sie forwardRef verwenden (kann in Verbindung mit useImperativeHandle verwendet werden).
  • Oder konvertieren Sie die Komponente in eine Klassenkomponente.
importiere React, { useEffect, useImperativeHandle } von "react";

// Übergeordnete Komponente const ForwardRef = React.memo(() => {
  const createRefComp = React.useRef();
  const createRefCompMethod = React.useRef();

  useEffect(() => {
    Konsole.log("useRefComp:", createRefComp.current);
    console.log("createRefCompMethod:", createRefCompMethod.current);
    Erstellen SieRefComp.current.reload();
  }, []);
  zurückkehren (
    <div>
      <ForwardRefFunc ref={createRefComp} />
    </div>
  );
});

Standard-ForwardRef exportieren;

const RefFunc = React.forwardRef((props, ref) => {
  const [name, setName] = React.useState(null);
  const neu laden = () => {
    console.log("neu laden");
    setzeTimeout(() => {
      setName("Weiterleitungsreferenzfunktion");
    }, 3000);
  };
  //useImperativeHandle ermöglicht Ihnen die Anpassung des Instanzwertes, der der übergeordneten Komponente angezeigt wird, wenn Sie rejectImperativeHandle(ref, () => { verwenden.
    zurückkehren {
      neu laden: neu laden,
    };
  });
  return <div ref={ref}>ForwardRefFunc {name}</div>;
});
const ForwardRefFunc = React.memo(RefFunc);

Das ultimative Ziel von forwardRef und useImperativeHandle ist der Versuch, ein aufrufbares Objekt für ref bereitzustellen!

  • Refs und das DOM
  • Weiterleitungsreferenz
  • Verwenden SieImperativeHandle

Zusammenfassen

Damit ist dieser Artikel über einige häufige Verwendungen von Refs in React abgeschlossen. Weitere Informationen zur Verwendung von Refs in React finden Sie in den vorherigen Artikeln von 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:
  • Detaillierte Erklärung der Verwendung von Refs in den drei Hauptattributen von React
  • Eine ausführliche Einführung in React-Referenzen
  • Tutorial zur Verwendung von Refs in React
  • Detaillierte Erklärung zur Verwendung von React-Komponentenreferenzen
  • Kennen Sie das Refs-Attribut in React?

<<:  So erweitern Sie die Festplattengröße einer virtuellen Maschine

>>:  MySQL 8.0 DDL-Atomaritätsfunktion und Implementierungsprinzip

Artikel empfehlen

JavaScript implementiert Informationen zur Kennwortfeldüberprüfung

In diesem Artikelbeispiel wird der spezifische Ja...

So verwenden Sie SessionStorage und LocalStorage in Javascript

Inhaltsverzeichnis Vorwort Einführung in SessionS...

Detaillierte Erklärung der allgemeinen For-Schleife in JavaScript-Anweisungen

Es gibt viele Schleifenanweisungen in JavaScript,...

MySQL verwendet UNIQUE, um das Einfügen nicht doppelter Daten zu implementieren

SQL UNIQUE-Einschränkung Die UNIQUE-Einschränkung...

Vier Möglichkeiten zum Wechseln von Registerkarten in VUE

Inhaltsverzeichnis 1. Statische Implementierungsm...

Empfohlene Tipps für Web-Frontend-Ingenieure

Lassen Sie uns zunächst über den Wert von Web-Fro...

Detaillierte Anweisungen zur Installation von Jenkins auf Ubuntu 16.04

1. Voraussetzungen JDK wurde installiert echo $PA...

Problem mit der Kompilierung des Nginx RTMP-Moduls in der Arm-Version

Inhaltsverzeichnis 1. Vorbereitung: 2. Quellcode-...

So sichern und wiederherstellen Sie die MySQL-Datenbank, wenn sie zu groß ist

Befehl: mysqlhotcopy Dieser Befehl sperrt die Tab...

So machen Sie React-Komponenten im Vollbildmodus

einführen Dieser Artikel basiert auf React + antd...

Zusammenfassung der Zeilenumbruchprobleme bei Textbereichen in HTML

Kürzlich stieß ich auf das Problem, ob die Daten b...

So implementieren Sie https mit Nginx und OpenSSL

Wenn die Serverdaten nicht verschlüsselt und mit ...