Wie Sie React forwardRef verwenden und was Sie beachten müssen

Wie Sie React forwardRef verwenden und was Sie beachten müssen

Bisher konnte react.forwardRef nicht auf höherwertige Komponenten angewendet werden. Ich habe es vor Kurzem endlich herausgefunden und es aufgeschrieben. Der entscheidende Punkt ist, dass der Verweis in der React.forwardRef-API auf ein Dom-Element und nicht auf eine React-Komponente zeigen muss.

Anwendungsbeispiele für React.forwardRef

Hier ist ein Beispiel für diesen Fehler, der auf eine React-Komponente angewendet wird:

const A = React.forwardRef((props,ref)=><B {...props} ref={ref}/>)

Das ist der Fehler, den ich früher oft gemacht habe. Der Schiedsrichter hier ist nicht effektiv.

Wie bereits erwähnt, muss ref auf ein DOM-Element verweisen, damit die richtige Methode angewendet wird:

const A = React.forwardRef((props, ref) => (
<div ref={ref}>
<B {...Requisiten} />
</div>
))

Funktion und Hinweise

  1. Die übergeordnete Komponente erstellt ein Ref-Objekt und bindet es an das Dom-Element oder die Klassenkomponente in der untergeordneten Komponente.
  2. Funktionskomponenten haben keine Instanzen
  3. Hochwertige Komponenten erfordern eine besondere Behandlung

Die übergeordnete Komponente erhält die Dom-Elementinstanz in der untergeordneten Komponente

Bildbeschreibung hier einfügen

importiere React, { useRef } von „react“;
Inhalt aus „./content“ importieren;

const Home = () => {
  // Ein Ref-Objekt erstellen const connectRef = useRef(null);

  const handleFoucus = () => {
    const _ref = connectRef.current;
    _ref.fokus();
  };

  zurückkehren (
    <div>
        <button onClick={() => handleFoucus()}>
          Methode von DOM-Elementen in untergeordneten Komponenten verwenden</button>

        <Inhaltsref={connectRef} />
    </div>
  );
};

Standard-Homepage exportieren;
importiere React, { forwardRef } von 'react';

/**
 * Nach dem ForwardRef-Umbruch wird ref als zweiter Parameter verwendet, um das übergebene ref-Attribut zu empfangen * zB
 * <Inhalt count={count} user={user} ref={connectRef}>
 *
 * @param props - {Anzahl, Benutzer}
 * @param ref - Verbindungsreferenz
 * */
const Inhalt = (Eigenschaften, Referenz) => {
  zurückkehren (
    <div>
   	  {/* Binde den Ref an den übergebenen Ref ≈ ref={connectRef} */}
      <input type="Passwort" ref={ref} />
    </div>
  )
};

exportiere Standard-ForwardRef(Inhalt);

Die übergeordnete Komponente erhält die Klassenkomponenteninstanz in der untergeordneten Komponente

Bildbeschreibung hier einfügen

importiere React, { useRef } von „react“;
Inhalt aus „./content“ importieren;

const Home = () => {
  // Ein Ref-Objekt erstellen const connectRef = useRef(null);

  const handleAdd = () => {
    const _ref = connectRef.current;

    const { Anzahl } = _ref.state;
    _ref.setState({
      Anzahl: Anzahl + 1
    })
  };

  zurückkehren (
    <div>
        <button onClick={() => handleAdd()}>
          Eigenschaften und Methoden der Klassenkomponente in der untergeordneten Komponente verwenden</button>

        <Inhaltsref={connectRef} />
    </div>
  );
};

Standard-Homepage exportieren;
importiere React, { forwardRef } von 'react';
Header aus „./header“ importieren;
Footer aus „./footer“ importieren;

/**
 * Nach dem ForwardRef-Umbruch wird ref als zweiter Parameter verwendet, um das übergebene ref-Attribut zu empfangen * zB
 * <Inhalt count={count} user={user} ref={connectRef}>
 *
 * @param props - {Anzahl, Benutzer}
 * @param ref - Verbindungsreferenz
 * */
const Inhalt = (Eigenschaften, Referenz) => {
  zurückkehren (
    <div>
      {/* Binde den Ref an den übergebenen Ref ≈ ref={connectRef} */}
      <Header ref={ref} /> {/* Klassenkomponente*/}
		
      {/* <Footer ref={ref} /> Funktionskomponenten haben keine Instanzen, also connectRef.current: null */}
    </div>
  )
};

exportiere Standard-ForwardRef(Inhalt)
importiere React von „react“;

exportiere Standardklasse Header erweitert React.Component {
  Zustand = {
    Anzahl: 0
  };

  rendern() {
    zurückkehren (
      <div>
        {dieser.Zustand.Anzahl}
      </div>
    )
  }
};

Sonderfälle in Komponenten höherer Ordnung

Die höherwertige Komponente übergibt alle empfangenen Props an die umschlossene Komponente (transparente Übertragung).
Ref ist ähnlich wie key. Es ist kein Requisit und wird daher nicht weitergegeben. Ref wird an den äußeren Verpackungscontainer gebunden.

/*
  Umgang mit Schiedsrichtern
  zB Hoc1(Hoc2(Inhalt))

  <Content ref={myRef} /> Der an Content gebundene Ref wird an Hoc1 gebunden und nicht an die erste Methode React.forwardRef weitergegeben ================

      Verwenden Sie React.forwardRef(), um den Verweis außerhalb von Hoc1 zu verarbeiten, und verwenden Sie Props, um den Verweis zu übergeben.
      0. Fügen Sie forwardRef außerhalb der Komponente höherer Ordnung ein, fangen Sie ref ab und erhalten Sie es, fügen Sie ein props (xxx={ref}) hinzu und erhalten Sie die reale Komponente über props.xxx1. Übergeben Sie ref={XXXX} bei Verwendung // Unterschied zur zweiten Methode2. Verwenden Sie den zweiten Parameter von forwardRef, um ref zu erhalten
      3. Fügen Sie eine neue Eigenschaft hinzu, um den Verweis nach unten weiterzuleiten, z. B. forwardedRef={ref}
      4. Binden Sie ref={props.forwardedRef} in die reale Komponente ein

      const Home = (Eigenschaften) => {
        const connectRef = useRef(null);

        zurückkehren (
          <div>
            <Inhaltsref={connectRef} />
          </div>
        );
      };

      // Umschlossene Komponente const Content = (props) => {
        zurückkehren (
          <div>
            <input type="Passwort" ref={props.forwardedRef} />
          </div>
        );
      };


      // Der zweite Eingabeparameter von forwardRef kann ref empfangen und ref in der äußeren Schicht von Hoc verarbeiten. Exportstandard React.forwardRef((props, ref) => {
        const Wrapper = React.memo(Inhalt); // Hoc

        // ForwardRef umschließt Wrapper
        // Der Verweis muss an die echte Komponente im Wrapper weitergegeben werden // Ein Props-Attribut im Wrapper hinzufügen und das Ref-Objekt als Props an die untergeordnete Komponente weitergeben return <Wrapper {...props} forwardedRef={ref} />;
      });

  Die zweite Methode ==========

  0. Verwenden Sie eine Requisite, um den Verweis zu speichern, wenn Sie
  1. Übergeben Sie xxx={ref} bei Verwendung // Unterschied zur ersten Methode 2. Binden Sie ref={props.xxx} in die reale Komponente ein

  const Home = (Eigenschaften) => {
    const connectRef = useRef(null);

    zurückkehren (
      <div>
        <Inhalt weitergeleitetRef={connectRef} />
      </div>
    );
  };

  // Definieren Sie eine Komponente höherer Ordnung export const Hoc = (WrappedComponent) => {
    Klasse Wrapper erweitert React.Component {
      rendern() {
        return <WrappedComponent {...props} />
      }
    }
  }

  // Umschlossene Komponente const Content = (props) => {
    zurückkehren (
      <div>
        <input type="Passwort" ref={props.forwardedRef} />
      </div>
    );
  };

  // Verpackungsprozess Export Standard Hoc(Content);

* */

Oben finden Sie detaillierte Informationen zur Verwendung und zu Vorsichtsmaßnahmen von React ForwardRef. Weitere Informationen zur Verwendung von React ForwardRef finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Die vollständige Verwendung von Setup, Ref und Reactive in der Vue3-Kombinations-API
  • So verstehen Sie das Ref-Attribut von React genau
  • Detaillierte Erklärung der Verwendung von Refs in den drei Hauptattributen von React
  • Spezifische Verwendung von useRef in React
  • Beispiele für die Verwendung von React Ref
  • Detaillierte Erklärung zur Verwendung von Ref in React
  • Detaillierte Erklärung zur Verwendung von react-refetch
  • Lernen Sie zwei Demobeispiele von ref in React
  • Tutorial zur Verwendung von Refs in React
  • Detaillierte Erklärung zur Verwendung von React-Komponentenreferenzen
  • Verwendung der Pulldown-Aktualisierung von RefreshControll in React Native
  • Detaillierte Erklärung der wechselseitigen Verwendung von Ref in React

<<:  Zusammenfassung der Wissenspunkte zur MySQL-Architektur

>>:  Zusammenfassung der Verwendung von MySQL Online DDL gh-ost

Artikel empfehlen

Erfahrung in der Lösung von Tomcat-Speicherüberlaufproblemen

Vor einiger Zeit habe ich Testern eine Produktver...

MySQL-Indexoptimierung: Detaillierte Einführung in die Paging-Erkundung

Inhaltsverzeichnis MySQL-Indexoptimierung – Pagin...

Eine ausführliche Zusammenfassung der Überlegungen zu MySQL-Zeiteinstellungen

Existiert die Zeit wirklich? Manche Menschen glau...

Auszeichnungssprache - Bildersetzung

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

JavaScript zum Erreichen eines einfachen Seiten-Countdowns

In diesem Artikelbeispiel wird der spezifische Ja...

Asynchrone Programmierung in Javascript: Verstehen Sie Promise wirklich?

Inhaltsverzeichnis Vorwort Grundlegende Verwendun...

Die neueste Installations- und Konfigurationsmethode für MySQL-5.7.21

1. Entpacken Sie das heruntergeladene MySQL-Kompr...

Lösung zum Verhindern des Caching in Seiten

Lösung: Fügen Sie in <head> den folgenden Co...

Zusammenfassung der Verwendung von Datetime und Timestamp in MySQL

Inhaltsverzeichnis 1. Wie wird die aktuelle Uhrze...

So verschieben Sie den Datenspeicherort von mysql5.7.19 in Centos7

Szenario: Mit zunehmender Datenmenge ist die Fest...