Heim > Web-Frontend > js-Tutorial > Implementierung eines Grundladezustands

Implementierung eines Grundladezustands

Linda Hamilton
Freigeben: 2025-01-03 02:37:13
Original
515 Leute haben es durchsucht

Implementing a basic loading state

Wie erstellt man einen grundlegenden Ladezustand mithilfe von HTML-, Javascript- und ReactJS-Hooks?

Anforderungen:
1) Funktionskomponente reagieren.
2) Es sollte nur der Ladetext zurückgegeben werden: „Laden“.
3) Zeigen Sie die Punkte an, die jede Sekunde inkrementell (1) am Ende des Ladetextes hinzugefügt werden.
Zum Beispiel:
Laden. -1s- Laden.. -1s- Laden... -1s- Laden

Ansatz:

Legen Sie die statischen Elemente fest. Fügen Sie dann die Dynamik hinzu (Zustände, Hooks usw.). Gemäß der Überlegung im React-Dokument.

Implementierung statischer Elemente:

1) Erstellen Sie eine Funktionskomponente, die „Laden“ zurückgibt.

const Loading = () => {
  const loadingText = "Loading";

  return (
    <div>
      <h2>{loadingText}</h2>
    </div>
  );
};

export default Loading;
Nach dem Login kopieren

Dynamik:

1) Die Anzahl der Punkte stellt einen Zustand der Komponente dar. Definieren Sie also eine Statusvariable mit useState.

const [dots, setDots] = useState(1);
Nach dem Login kopieren

Und fügen Sie die Punkte hinzu, nachdem Sie den Text geladen haben

{".".repeat(dots)}
Nach dem Login kopieren

2) Ein Zustand ändert sich automatisch nach jeder Sekunde. window.setInterval kann diese Aufgabe ausführen. Lassen Sie die Rückruffunktion vorerst leer.

window.setInterval(() => {
      // Logic to increment dots
    }, 1000);
Nach dem Login kopieren

3) Erstellen Sie einen useEffect-Hook, der nach dem ersten Rendern nur einmal ausgeführt wird.

useEffect(() => {
    window.setInterval(() => {
      // Logic to increment dots
    }, 1000);
  }, []);
Nach dem Login kopieren

Bisher zeigt die App nur „Laden“ an.
Machen Sie eine Pause und denken Sie über die Logik in der Rückruffunktion window.setInterval nach.

Die naheliegendste Lösung:

setDots((dots + 1) % 4);
Nach dem Login kopieren

Allerdings es ist falsch. Die Komponente wird nur ab
verfügbar sein „Laden.“-1s-„Laden...“. Dann bleibt es hängen.

Grund: Der Rückruf-FN von useEffect wird beim Anfangszustand der Punkte (1) ausgelöst. Jede Aktualisierung der Dots-Variable hat keinen Einfluss auf das Schließen der Callback-FN von useEffect.

Catch-1: Das Einfügen von Punkten in das Abhängigkeitsarray von useEffect macht keinen Sinn. Denn dann ruft es window.setInterval bei jeder Aktualisierung des Punktstatus auf. (Kann stattdessen window.setTimeout verwenden. Aber warum?)

Catch-2: Der Punktstatus der Loading-Komponente sollte von useEffect und window.setInterval abhängen. Wenn Sie jedoch Punkte direkt im useEffect verwenden, hängt der useEffect davon ab.

Bevor Sie mit dem nächsten Schritt fortfahren, denken Sie über Schließungen nach.

Überarbeiteter Ansatz

Definieren Sie den eigenen Punktstatus des Rückrufs von useEffect (z. B. effectDots). Die Rückruffunktion von window.setInterval erhöht die effectDots und legt außerdem den Punktstatus der Loading Component fest.
(Der Schlüssel besteht darin, die Abhängigkeit von setInterval -> dots state der Komponente in dots state der Komponente -> setInterval zu ändern.)

Überarbeitete Version der Rückruffunktionen von useEffect und window.setInterval mit einem lokalen Zustand effectDots:

  useEffect(() => {
    let effectDots = 1;
    window.setInterval(() => {
      // increment, modulo 4
      // set the Loading component's state
      setDots(effectDots++ % 4);
    }, 1000);
  }, []);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonImplementierung eines Grundladezustands. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage