React implementiert die Prinzipanalyse der drei Phasen Laden, Laden, Abschluss und Ladefehler

React implementiert die Prinzipanalyse der drei Phasen Laden, Laden, Abschluss und Ladefehler

Kürzlich schrieb ich in meinem Blog, dass ich festgestellt habe, dass sich hier in der Projektliste viele Bilder befanden und das Laden am Anfang langsam sein würde. Deshalb wollte ich ein loading verwenden, um Platz zu beanspruchen. Wenn das Laden des Bildes fehlschlägt, wird gleichzeitig anstelle des ursprünglichen Fehlers das Fehlerbild angezeigt, was hässlich ist.

Wirkung

Bildbeschreibung hier einfügen

Prinzipanalyse

Dies ist eine Komponente, eine Komponente zum Anzeigen von Bildern. Ändern Sie einfach die URL-Adresse des img-Tags. Ja, das ist richtig. Ändern Sie die Adresse direkt in Vue, und Vue aktualisiert die Daten entsprechend.

Bild der Veranstaltung

Es gibt viele Ereignisse für Bilder, z. B. onload , onerror usw. Das Ereignis onload wird aufgerufen, sobald das Bild geladen wird, unabhängig davon, ob das Laden erfolgreich war oder fehlgeschlagen ist. Die Methode onerror wird aufgerufen, wenn das Bild nicht angezeigt wird. Aus dem Vergleich dieser beiden Methoden können wir erkennen, dass wir zum Laden des Images am Anfang Onload verwenden müssen und dass das Image erfolgreich sein oder fehlschlagen kann usw.

Komponentencode

importiere { ImgHTMLAttributes } von "react";

/**
 * Eigenschaften der Bildplatzhalterkomponente*/
Exportschnittstelle IImagProps<T> erweitert ImgHTMLAttributes<T> {
  /**
   * Bilder werden geladen */
  Bild wird geladen?: Zeichenfolge,
  /**
   * Das Bild konnte nicht geladen werden */
  Fehlerbild?: Zeichenfolge,
 /**
  * Die Adresse, unter der das Bild normalerweise angezeigt wird*/
  src: Zeichenfolge,
}

importiere React, { useState } von 'react'
// Die folgenden beiden dienen zum Importieren der Standardbilder: import loadImg von './../../../assets/imgs/loading/load.gif';
importiere errorImg aus './../../../assets/imgs/loading/error.png'
exportiere Standardfunktion Img(props: IImagProps<any>) {
  // Bildadresse const [src, setSrc] = useState(props.loadingImg as string)
  // Ist das das erste Mal, dass geladen wird? Wenn du das nicht verwendest, wird es zweimal geladen const [isFlag, setIsFlag] = useState(false)
  /**
   * Bild geladen*/
  const handleOnLoad = () => {
    // Bestimmen Sie, ob es das erste Mal ist, zu laden, if (isFlag) return;
    // Ein img-Tag erstellen const imgDom = new Image();
    imgDom.src = props.src;
    // Das Laden des Bildes ist abgeschlossen. Verwenden Sie das normale Bild imgDom.onload = function () {
      setIsFlag(true)
      setSrc(Eigenschaften.src)
    }
    // Laden des Bilds fehlgeschlagen, Bildplatzhalter verwenden imgDom.onerror = function () {
      setIsFlag(true)
      setSrc(props.errorImg als Zeichenfolge)
    }
  }
  
  zurückkehren (
    <>
      <img src={src}
        beim Laden={handleOnLoad}
        Stil={{
          Höhe: 'erben',
        }}
      ></img>
    </>
  )
}
// Standardstil zum Laden von Bildern und fehlgeschlagenen Bildern festlegen Img.defaultProps = {
  Bild wird geladen: Bild wird geladen,
  Fehlerbild: Fehlerbild
}

PS: Schauen wir uns den Ladeeffekt an, bevor das img-Bild in React geladen wird

  • Ich habe eine solche Anforderung in React, nämlich, dass ich den Ladeanimationseffekt vor dem Laden des Bildes anzeigen und das Bild nach dem Laden rendern möchte.
  • Lassen Sie uns zuerst über die spezifischen Ideen sprechen und dann über die praktische Anwendung
  • Umsetzungsideen:
// Angenommen, ich möchte diese drei Webbilder laden var imglist = ['http://example.com/demo1.png','http://example.com/demo2.png','http://example.com/demo3.png']
// images wird zum Speichern der geladenen Bilder verwendet var images = []
imglist.fürJeden(el=>{
	var image = neues Image()
	image.src = el
	bild.onload = funktion(){
		// Zeigt an, dass das Bild geladen wurde. // Das geladene Bild zu den Bildern hinzufügen images.push(image)
	}
})

//Beurteilen, wann die Komponente gerendert wird, if(images.length === 3){
	// Dies bedeutet, dass alle drei Webseitenbilder geladen wurden und gerendert werden können. // Geladene Bilder rendern. }else{
	// Dies bedeutet, dass die Bilder der Webseite noch nicht vollständig geladen wurden, sodass der Ladeanimationseffekt fortgesetzt wird. // Ladeanimationseffekt}

Konkrete Implementierungsbeispiele

React von „react“ importieren
importiere { Carousel, Spin } von 'antd' // benutze antd
// Erstellen Sie die Home-Komponentenklasse Home extends React.Component{
	Konstruktor (Requisiten) {
		super(Requisiten)
		dieser.Zustand = {
			Bildliste: [
				{
					ID: '01',
					Quelle: 'http://example.com/demo1.png',
					alt: 'demo1'
				},
				{
					ID: '02',
					Quelle: 'http://example.com/demo2.png',
					alt: 'demo2'
				},
				{
					ID: '03',
					Quelle: 'http://example.com/demo3.png',
					alt: 'demo3'
				}
			],
			Bilder: []
		}
	}
	UNSAFE_componentWillMount(){
		// Führen Sie Operationen vor dem Rendern aus var { imglist } = this.state
		var Bilder = []
		imglist.fürJeden(el=>{
			var image = neues Image()
			bild.src = el.src
			bild.beladen = ()=>{
				Bilder.push(Bild)
				dies.setState({
					Bilder
				})
			}
		})
	}
	machen(){
		var { imglist, Bilder } = dieser.Zustand
		wenn(Bilder.Länge === 3){
			// Dies bedeutet, dass alle drei Bilder geladen wurden und gerendert werden können. return (
				<div Klassenname = 'gemeinsamer Textkörper'>
					<Karussell automatisch abspielen>
						{imglist.map(el=>(
							<img src={el.src} key={el.id} alt={el.alt} />
						))}
					</Karussell>
				</div>
			)
		}anders{
			// Das Bild wurde noch nicht vollständig geladen, daher sollte zu diesem Zeitpunkt der Ladeanimationseffekt angezeigt werden return (
				<div Klassenname = 'gemeinsames Laden'>
					<Spin-Tipp='Wird geladen...' Größe='groß'></Spin>
				</div>
			)
		}
	}
}
Standard-Startseite exportieren

Diese Methode ist noch nützlicher

Oben finden Sie den detaillierten Inhalt der Prinzipanalyse der drei Phasen der Implementierung von React: Laden von Bildern, Laden abgeschlossen und Laden fehlgeschlagen. Weitere Informationen zum Abschluss des Ladens von Bildern von React finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Mehrere Implementierungslösungen für das verzögerte Laden von React-Routen
  • React Native-Codebeispiel basierend auf FlatList Pulldown Refresh Pullup Load
  • Beispiel für eine benutzerdefinierte Pulldown-Aktualisierung mit Pullup und geladener Liste in React Native
  • React-native ListView zum Aktualisieren nach unten ziehen und zum Laden des Implementierungscodes nach oben ziehen
  • Implementierung und Prinzip des On-Demand-Ladens von React-Router 4 – ausführliche Erläuterung
  • Detaillierte Erklärung zur Verwendung von require.ensure() zum bedarfsgesteuerten Laden von ES6-Komponenten in der React-Entwicklung

<<:  Perfekte Lösung für keine rc.local-Datei in Linux

>>:  Der einfachste Weg, MySQL 5.7.20 mit yum in CentOS 7 zu installieren

Artikel empfehlen

Implementierung der Bereitstellung des Nginx+ModSecurity-Sicherheitsmoduls

Inhaltsverzeichnis 1. Herunterladen 2. Bereitstel...

Einführung in Container-Datenvolumes in Docker

Inhaltsverzeichnis Datenvolumen des Docker-Contai...

MySQL NULL-Datenkonvertierungsmethode (unbedingt lesen)

Wenn Sie MySQL zum Abfragen der Datenbank verwend...

Die Hook-Funktion von Vue-Router implementiert Routing Guard

Inhaltsverzeichnis Überblick Globale Hook-Funktio...

Implementierungs- und Nutzungsszenarien der JS-Anti-Shake-Drosselungsfunktion

Inhaltsverzeichnis 1. Was ist die Anti-Shake-Funk...

MySQL Null kann 5 Probleme verursachen (alle schwerwiegend)

Inhaltsverzeichnis 1. Zähldaten gehen verloren Lö...

Detaillierte Erläuterung der Laderegeln der require-Methode in node.js

Laderegeln der Require-Methode Laden aus dem Cach...

Zugriffsvorgang im MySQL-Befehlszeilenmodus MySQL-Datenbankvorgang

Nutzungsumgebung Geben Sie im cmd-Modus mysql --v...

Detaillierte Schritte zur Installation von Python 3.7 auf CentOS 6.5

1. Python 3 herunterladen wget https://www.python...

Tudou.com Frontend-Übersicht

1. Arbeitsteilung und Prozess <br />Bei Tud...