Detailliertes Beispiel für die Verwendung von useState in React

Detailliertes Beispiel für die Verwendung von useState in React

Verwendungsstatus

useState fügt einer Komponente einen internen Status hinzu, indem es sie in einer Funktionskomponente aufruft. React behält diesen Status über erneute Renderings hinweg bei. Verwendungsstatus
Es gibt ein Wertepaar zurück: den aktuellen Status und eine Funktion, mit der Sie ihn aktualisieren können und die Sie innerhalb eines Ereignishandlers oder anderswo aufrufen können. Es ist ähnlich wie die Klassenkomponente
this.setState, aber es führt den neuen Status nicht mit dem alten Status zusammen.

Sehen wir uns als Nächstes ein Beispiel an, um zu sehen, wie useState verwendet wird.

Es gibt eine Anforderung: Sie müssen eine externe Webseite in einem Iframe laden .

Im Ausgangscode verwenden wir zur Erfüllung dieser Anforderung funktionale Komponenten , für deren Darstellung lediglich ein einfaches Iframe erforderlich ist :

importiere React, { useState } von 'react';

Stile aus „./index.less“ importieren;

Funktion Link(Eigenschaften) {
  const { match: { params: { link = '' } = {} } = {} } = props;
  const enCodeUrl = decodeURIComponent(link);
  const url = enCodeUrl.startsWith('http') ? enCodeUrl : `http://${enCodeUrl}`;
  zurückkehren (
    <Reagieren.Fragment>
        <iframe
          Titel={Link}
          src={url}
          Stil = {{ Breite: '100 %', Höhe: '100 %', vertikale Ausrichtung: 'oben' }}
          Rahmengrenze="0"
        />
    </React.Fragment>
  );
}

Standardlink exportieren;

Es ist eine neue Anforderung hinzugekommen. Wir müssen der Seite einen Ladeeffekt hinzufügen. Die Implementierungsmethode ist sehr einfach. Hören Sie auf das Ladeereignis des Iframes, um den Beginn und das Ende des Ladevorgangs festzulegen .

Um diese Anforderung zu erfüllen, müssen wir den Ladestatus speichern. Funktionale Komponenten haben jedoch keinen eigenen Status. Deshalb müssen wir sie in Klassenkomponenten umwandeln:

importiere React von „react“;
importiere { Spin } von 'antd';

Stile aus „./index.less“ importieren;

exportiere Standardklasse Link erweitert React.Component {
  Zustand = {
    //Ladestatus speichern iLoading: true,
  };

  linkLoad() {
    //Update wird geladen
    this.setState({ iLoading: false });
  }

  rendern() {
    const { match: { params: { link = '' } = {} } = {} } = this.props;
    const { iLoading } = dieser.Zustand;
    const enCodeUrl = decodeURIComponent(link);
    const url = enCodeUrl.startsWith('http') ? enCodeUrl : `http://${enCodeUrl}`;
    zurückkehren (
      <Reagieren.Fragment>
        <Drehen spinning={iLoading} wrapperClassName={styles['iframe-loading']}>
          <iframe
            beim Laden = {dieses.linkLoad.bind(dieses)}
            Titel={Link}
            src={url}
            Stil = {{ Breite: '100 %', Höhe: '100 %', vertikale Ausrichtung: 'oben' }}
            Rahmengrenze="0"
          />
        </Drehen>
      </React.Fragment>
    );
  }
}

Um das Laden einer Seite zu realisieren, müssen wir die Klasse verwenden und diese und andere umständliche Verhaltensweisen binden . Dies ist nur eine einfache Anforderung, aber wir können diese Probleme durch Hooks lösen und gleichzeitig das Problem der Statuswiederverwendung zwischen Komponenten lösen. Wir verwenden useState, um dies zu erreichen .

UseState importieren
importiere React, { useState } von 'react';
Definieren Sie den Status // Der Parameter von useState ist der Anfangswert des Status und setInitLoading ist die Methode zum Ändern des Statuswerts const [initLoading, setInitLoading] = useState(true);
Status beim Laden aktualisieren = {() => setInitLoading(false)}
Der vollständige Code lautet wie folgt:

importiere React, { useState } von 'react';
importiere { Spin } von 'hzero-ui';

Stile aus „./index.less“ importieren;

Funktion Link(Eigenschaften) {
  const { match: { params: { link = '' } = {} } = {} } = props;
  const [initLoading, setInitLoading] = useState(true);
  const enCodeUrl = decodeURIComponent(link);
  const url = enCodeUrl.startsWith('http') ? enCodeUrl : `http://${enCodeUrl}`;
  zurückkehren (
    <Reagieren.Fragment>
      <Drehen spinning={initLoading} wrapperClassName={styles['iframe-loading']}>
        <iframe
          beim Laden = {() => setzeInitLoading(false)}
          Titel={Link}
          src={url}
          Stil = {{ Breite: '100 %', Höhe: '100 %', vertikale Ausrichtung: 'oben' }}
          Rahmengrenze="0"
        />
      </Drehen>
    </React.Fragment>
  );
}

Standardlink exportieren;

Schauen wir uns die folgenden Vorsichtsmaßnahmen für useState an

useState-Parameter

Die Parameter von useState können entweder primitive Typen oder Objekttypen sein. Denken Sie beim Aktualisieren des Objekttyps daran, den alten Status zusammenzuführen, da sonst der alte Status verloren geht.

const [params, setParams] = useState({
  drehen: 0,
  Farbe: "#000000"
});

const handleInputChange = Ereignis => {
  const Ziel = Ereignis.Ziel;
  setParams({
    ...Parameter,
    [Zielname]: Zielwert
  });
};

Staatliche Abhängigkeit

Wenn der aktuelle Zustand auf Basis des Wertes des letzten aktualisierten Zustands berechnet werden soll, wird eine Funktion an die Funktion übergeben, die den Zustand aktualisiert. Der erste Parameter dieser Funktion ist der Wert der letzten Aktualisierung und das berechnete Ergebnis wird als Rückgabewert zurückgegeben.

Zusammenfassen

Der useState-Hook ermöglicht Funktionskomponenten die Verwendung von Statusverwaltungsfunktionen, die der Statusverwaltung herkömmlicher Klassenkomponenten ähneln, jedoch präziser sind und nicht häufig verwendet werden müssen. In den folgenden Artikeln stellen wir vor, wie andere Hooks kombiniert werden, um Geschäftslogik zu extrahieren, sodass Komponentencode und Hook-Code ihre jeweiligen Funktionen ausführen können.

Das könnte Sie auch interessieren:
  • Spezifische Verwendung von useRef in React
  • Einführung in useRef und useState in JavaScript

<<:  Datenbankabfrageoptimierung: Unterabfrageoptimierung

>>:  Detailliertes Beispiel für SpringBoot + nginx zum Erreichen der Ressourcen-Upload-Funktion

Artikel empfehlen

Detaillierte Erklärung der JavaScript-Array-Deduplizierung

Inhaltsverzeichnis 1. Array-Deduplizierung 2. Ded...

Was tun, wenn Sie Ihr Passwort in MySQL 5.7.17 vergessen?

1. Skip-Grant-Tables zur Datei my.ini hinzufügen ...

Zusammenfassung zur Verwendung der Reduce()-Methode in JS

Inhaltsverzeichnis 1. Grammatik 2. Beispiele 3. A...

So isolieren Sie Benutzer in Docker-Containern

Im vorherigen Artikel „UID und GID in Docker-Cont...

So lösen Sie das Problem der Groß-/Kleinschreibung bei MySQL-Abfragen

Frage Als ich kürzlich ein praktisches Projekt mi...

Implementierung eines einfachen Whack-a-Mole-Spiels in JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

Implementierung eines laufenden Springboot-Projekts mit Docker

Einführung: Die Konfiguration von Docker, auf dem...

Vue realisiert den Produktlupeneffekt

In diesem Artikelbeispiel wird der spezifische Co...

Eine kurze Diskussion über Browserkompatibilitätsprobleme in JavaScript

Die Browserkompatibilität ist der wichtigste Teil...

So richten Sie domänenübergreifenden Zugriff in IIS web.config ein

Anforderung: Die Seite muss ein Bild anzeigen, ab...

Probleme und Lösungen bei der Installation und Verwendung von VMware

Die virtuelle Maschine wird verwendet oder es kan...

7 Möglichkeiten, Elemente mit CSS vertikal zu zentrieren

【1】Kennen Sie die Breite und Höhe des zentrierten...

Reagiert auf verschiedene Arten, Parameter zu übergeben

Inhaltsverzeichnis Übergeben von Parametern zwisc...