Dies ist der Inhalt von React 16. Es ist nicht die neueste Technologie, aber sie wurde selten diskutiert, bis ich sie in der Dokumentation fand. Es ist tatsächlich ein sehr nützlicher Teil. Fassen wir es zusammen~ Nicht erfasste JS-Fehler in React können zum Absturz der gesamten Anwendung und zur Demontage des gesamten Komponentenbaums führen. Dies ist seit React 16 der Fall. Gleichzeitig führte React aber auch ein neues Konzept ein: die Fehlergrenze. Definition, was istEine Fehlergrenze ist immer noch eine Komponente, die JavaScript-Fehler überall in ihrem untergeordneten Komponentenbaum abfangen (drucken oder anderweitig verarbeiten) und bei Bedarf eine alternative Benutzeroberfläche rendern kann. Funktioniert ähnlich wie Try-Catch, aber Fehlergrenzen werden nur für React-Komponenten verwendet. Nur Klassenkomponenten können zu Fehlergrenzkomponenten werden. Fehlergrenzen können nur Fehler in Unterkomponenten erfassen, nicht ihre eigenen Fehler. Fehlergrenzen fangen Fehler während des Renderns, im Lebenszyklus und in Konstruktoren für den gesamten Komponentenbaum ab. Ohne Fehlergrenzenbehandlung bricht der gerenderte untergeordnete Komponentenbaum dennoch zusammen, was wir offensichtlich nicht wollen. Schauen wir uns ein Beispiel an, um die Verwendung von Fehlergrenzen Schritt für Schritt zu demonstrieren: exportiere Standardklasse ErrorTest erweitert Komponente { Konstruktor(Requisiten) { super(Requisiten); } rendern() { zurückkehren ( <div> <Fehlerzähler></Fehlerzähler> <span>mein Name ist Dan</span> </div> ); } } // Fehler-Komponentenklasse BugCounter erweitert Komponente { Konstruktor(Requisiten) { super(Requisiten); dieser.Zustand = { Zähler: 0, }; } klick = () => { this.setState(({ Zähler }) => ({ Zähler: Zähler + 1 })); }; rendern() { wenn (dieser.Zustand.Zähler === 5) { throw new Error("abgestürzt!"); } zurückkehren ( <div> <h3 bei Klick = {dieser.Klick}> {dieser.Zustand.Zähler}</h3> </div> ); } } Das Rendering-Ergebnis des obigen Codes (Stile ignorierend): Klicken Sie auf die Zahl Dieser Im Produktionsmodus wird ein weißer Bildschirm angezeigt und ein Fehler in der Konsole gemeldet: getDerivedStateFromError und componentDidCatch Zur Bewältigung dieser Art von Absturz ist eine Fehlergrenze erforderlich. Wie definiert man eine Fehlergrenze? Definieren Sie eine Komponente und implementieren Sie Diese beiden Lebenszyklusfunktionen können Sie über den folgenden Link einsehen: componentDidCatch(Fehler, Info) statisch getDerivedStateFromError(Fehler) Wird aufgerufen, nachdem eine untergeordnete Komponente einen Fehler ausgelöst hat, mit dem ausgelösten Fehler als Argument. Um den Status zu aktualisieren, muss ein Wert zurückgegeben werden. Diese Funktion wird während der Rendering-Phase aufgerufen und es sind keine Nebenwirkungen zulässig. Wenn Sie nach dem Abfangen eines Fehlers Nebeneffekte ausführen müssen, sollten Sie dies in Erstellen einer FehlergrenzkomponenteMit der Kombinationsmethode können Sie eine Fehlergrenzenkomponente hinzufügen, um die Komponente, die Sie verwenden möchten, zu umschließen. Diese Komponente erfordert diese Effekte:
Dann kann es so sein: Klasse ErrorBoundary erweitert React.Component { Konstruktor(Requisiten) { super(Requisiten); dieser.Zustand = { hasError: false }; } statisch getDerivedStateFromError(Fehler) { // Aktualisieren Sie den Status, damit beim nächsten Rendering die verschlechterte Benutzeroberfläche angezeigt werden kann. return { hatFehler: true }; } componentDidCatch(Fehler, Fehlerinfo) { // Sie können Fehlerprotokolle auch an den Server melden logErrorToMyService(error, errorInfo); } rendern() { wenn (dieser.Zustand.hatFehler) { // Sie können die heruntergestufte Benutzeroberfläche anpassen und das Rendering zurückgeben <h1>Etwas ist schiefgelaufen.</h1>; } gib diese.Eigenschaften.Kinder zurück; } } Der Nebeneffekt nach dem Abfangen des Fehlers besteht in der Anpassung, dem Hochladen auf den Server oder der Verwendung componentDidCatch(Fehler, Fehlerinfo) { // Fehler in den folgenden Komponenten abfangen und mit Fehlermeldung erneut rendern dies.setState({ Fehler: Fehler, Fehlerinfo: Fehlerinfo }) } ErfassungsverarbeitungFügen Sie den gesamten Code hinzu, umschließen Sie die problematische Komponente mit der Fehlergrenzkomponente und sehen Sie sich das Ergebnis an: importiere { Komponente } von „react“; exportiere Standardklasse ErrorTest erweitert Komponente { rendern() { zurückkehren ( <div> <Fehlergrenze> <Fehlerzähler></Fehlerzähler> </Fehlergrenze> <span>mein Name ist Dan</span> </div> ); } } // Fehler-Komponentenklasse BugCounter erweitert Komponente { Konstruktor(Requisiten) { super(Requisiten); dieser.Zustand = { Zähler: 0, }; } klick = () => { this.setState(({ Zähler }) => ({ Zähler: Zähler + 1 })); }; rendern() { wenn (dieser.Zustand.Zähler === 5) { throw new Error("abgestürzt!"); } zurückkehren ( <div> <h3 bei Klick = {dieser.Klick}> {dieser.Zustand.Zähler}</h3> </div> ); } } // Fehlergrenzenverarbeitungskomponentenklasse ErrorBoundary erweitert Component { Konstruktor(Requisiten) { super(Requisiten); dieser.Zustand = { hasError: false }; } statisch getDerivedStateFromError(Fehler) { // Aktualisieren Sie den Status, damit beim nächsten Rendering die verschlechterte Benutzeroberfläche angezeigt werden kann. return { hatFehler: true }; } rendern() { wenn (dieser.Zustand.hatFehler) { // Sie können die heruntergestufte Benutzeroberfläche anpassen und das Rendering zurückgeben <h1>Etwas ist schiefgelaufen.</h1>; } gib diese.Eigenschaften.Kinder zurück; } } Das Auslösen einer Ausnahme meldet im Entwicklungsmodus immer noch einen Fehler. Nachdem Sie jedoch Es ist ersichtlich, dass, obwohl der Konsolenfehler aufgrund eines Umfang Fehlergrenzen werden verwendet, um Fehler im Lebenszyklus von Unterkomponenten und in Renderingfunktionen zu behandeln. Bei Eventhandlern werden sie während des Renderings nicht ausgelöst. Fehlergrenzen können in den folgenden Szenarien keine Fehler erfassen:
In Bezug auf Fehlergrenzen lohnt es sich, eine offizielle https://codepen.io/gaearon/pen/wqvxGa?editors=0010 siehe:https://zh-hans.reactjs.org/docs/error-boundaries.html https://zh-hans.reactjs.org/docs/react-component.html https://codepen.io/gaearon/pen/wqvxGa?editors=0010 Dies ist das Ende dieses Artikels über die Handhabung von React-Fehlergrenzkomponenten. Weitere relevante Inhalte zu React-Fehlergrenzen finden Sie in früheren Artikeln auf 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:
|
<<: Verwendung der Zabbix-API in einer Linux-Shell-Umgebung
>>: So lösen Sie das Problem der Nichtübereinstimmung des MySQL-Abfragezeichensatzes
Dieser Artikel ist der zweite Artikel über Objekt...
Vorwort innodb_data_file_path wird verwendet, um ...
Inhaltsverzeichnis Grundtypen jeder Typ Arrays Tu...
border-radius:10px; /* Alle Ecken sind mit einem ...
Inhaltsverzeichnis 1. Grundlagen 2. Knoten, Bäume...
In diesem Artikelbeispiel wird der spezifische Co...
In diesem Artikel wird der spezifische Code von j...
Inhaltsverzeichnis Vorwort denken Analysieren und...
In letzter Zeit möchte ich regelmäßig wichtige in...
1. Einleitung In diesem Artikel wird beschrieben,...
Heutzutage ist die Anwendungsentwicklung grundsät...
In diesem Artikelbeispiel wird der spezifische Co...
1. Die Größe des durch den HTML-Hyperlink geöffne...
Nehmen Sie nun an, dass Sie dem Formular ein Elem...
8 Optimierungsmethoden für das MySQL-Datenbankdes...