Deutsch

Meistern Sie React Suspense & Error Boundaries für robustes Lade-Management & Fehlerbehandlung. Erstellen Sie resiliente, benutzerfreundliche Anwendungen.

React Suspense und Error Boundaries: Fortgeschrittenes Lade- und Fehlermanagement

React Suspense und Error Boundaries sind leistungsstarke Funktionen, die es Entwicklern ermöglichen, robustere und benutzerfreundlichere Anwendungen zu erstellen. Sie bieten eine deklarative Möglichkeit, Ladezustände und unerwartete Fehler zu handhaben, was die allgemeine Benutzererfahrung verbessert und den Entwicklungsprozess vereinfacht. Dieser Artikel bietet eine umfassende Anleitung zur effektiven Nutzung von React Suspense und Error Boundaries, die alles von grundlegenden Konzepten bis hin zu fortgeschrittenen Techniken abdeckt.

React Suspense verstehen

React Suspense ist ein Mechanismus, um das Rendern einer Komponente zu "unterbrechen", bis eine bestimmte Bedingung erfüllt ist, typischerweise die Verfügbarkeit von Daten aus einer asynchronen Operation. Dies ermöglicht es Ihnen, eine Fallback-Benutzeroberfläche, wie z. B. Ladeindikatoren, anzuzeigen, während auf das Laden der Daten gewartet wird. Suspense vereinfacht die Verwaltung von Ladezuständen, eliminiert die Notwendigkeit manueller bedingter Renderings und verbessert die Lesbarkeit des Codes.

Schlüsselkonzepte von Suspense

Grundlegende Implementierung von Suspense

Hier ist ein einfaches Beispiel, wie man Suspense verwendet, um einen Ladeindikator während des Datenabrufs anzuzeigen:


import React, { Suspense } from 'react';

// Simulieren des Datenabrufs (z.B. von einer API)
const fetchData = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ name: 'John Doe', age: 30 });
    }, 2000);
  });
};

// Erstellen einer Ressource, die Suspense verwenden kann
const createResource = (promise) => {
  let status = 'pending';
  let result;
  let suspender = promise().then(
    (r) => {
      status = 'success';
      result = r;
    },
    (e) => {
      status = 'error';
      result = e;
    }
  );

  return {
    read() {
      if (status === 'pending') {
        throw suspender;
      } else if (status === 'error') {
        throw result;
      }

      return result;
    },
  };
};

const userData = createResource(fetchData);

// Komponente, die aus der Ressource liest
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( Lade Benutzerdaten...
}> ); }; export default App;

In diesem Beispiel:

Suspense mit Code-Splitting

Suspense kann auch mit React.lazy verwendet werden, um Code-Splitting zu implementieren. Dies ermöglicht es Ihnen, Komponenten nur dann zu laden, wenn sie benötigt werden, was die anfängliche Seitenladeleistung verbessert.


import React, { Suspense, lazy } from 'react';

// Die MyComponent-Komponente per Lazy-Loading laden
const MyComponent = lazy(() => import('./MyComponent'));

const App = () => {
  return (
    Lade Komponente...}>
      
    
  );
};

export default App;

In diesem Beispiel:

Error Boundaries verstehen

Error Boundaries sind React-Komponenten, die JavaScript-Fehler überall in ihrem untergeordneten Komponentenbaum abfangen, diese Fehler protokollieren und eine Fallback-Benutzeroberfläche anzeigen, anstatt die gesamte Anwendung zum Absturz zu bringen. Sie bieten eine Möglichkeit, unerwartete Fehler anmutig zu behandeln, was die Benutzererfahrung verbessert und Ihre Anwendung robuster macht.

Schlüsselkonzepte von Error Boundaries

Grundlegende Implementierung von Error Boundaries

Hier ist ein einfaches Beispiel, wie man eine Error Boundary erstellt:


import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // Den Zustand aktualisieren, damit der nächste Render die Fallback-Benutzeroberfläche anzeigt.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Sie können den Fehler auch an einen Fehlerberichts-Dienst protokollieren
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Sie können jede beliebige benutzerdefinierte Fallback-Benutzeroberfläche rendern
      return 

Etwas ist schiefgelaufen.

; } return this.props.children; } } export default ErrorBoundary;

In diesem Beispiel:

Verwendung von Error Boundaries

Um die `ErrorBoundary`-Komponente zu verwenden, umschließen Sie einfach die Komponenten, die Sie schützen möchten, damit:


import React from 'react';
import ErrorBoundary from './ErrorBoundary';

const MyComponent = () => {
  // Einen Fehler simulieren
  throw new Error('Ein Fehler ist aufgetreten!');
};

const App = () => {
  return (
    
      
    
  );
};

export default App;

In diesem Beispiel, wenn ein Fehler in `MyComponent` auftritt, fängt die `ErrorBoundary`-Komponente den Fehler ab und zeigt die Fallback-Benutzeroberfläche an.

Kombination von Suspense und Error Boundaries

Suspense und Error Boundaries können kombiniert werden, um eine robuste und umfassende Fehlerbehandlungsstrategie für asynchrone Operationen zu bieten. Indem Sie Komponenten, die unterbrochen werden könnten, sowohl mit Suspense als auch mit Error Boundaries umschließen, können Sie sowohl Ladezustände als auch unerwartete Fehler anmutig behandeln.

Beispiel für die Kombination von Suspense und Error Boundaries


import React, { Suspense } from 'react';
import ErrorBoundary from './ErrorBoundary';

// Simulieren des Datenabrufs (z.B. von einer API)
const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // Einen erfolgreichen Datenabruf simulieren
      // resolve({ name: 'John Doe', age: 30 });

      // Einen Fehler während des Datenabrufs simulieren
      reject(new Error('Benutzerdaten konnten nicht abgerufen werden'));

    }, 2000);
  });
};

// Erstellen einer Ressource, die Suspense verwenden kann
const createResource = (promise) => {
  let status = 'pending';
  let result;
  let suspender = promise().then(
    (r) => {
      status = 'success';
      result = r;
    },
    (e) => {
      status = 'error';
      result = e;
    }
  );

  return {
    read() {
      if (status === 'pending') {
        throw suspender;
      } else if (status === 'error') {
        throw result;
      }

      return result;
    },
  };
};

const userData = createResource(fetchData);

// Komponente, die aus der Ressource liest
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( Lade Benutzerdaten...}> ); }; export default App;

In diesem Beispiel:

Fortgeschrittene Techniken und Best Practices

Optimierung der Suspense-Leistung

Benutzerdefinierte Error Boundaries

Sie können benutzerdefinierte Error Boundaries erstellen, um bestimmte Arten von Fehlern zu behandeln oder informativere Fehlermeldungen bereitzustellen. Zum Beispiel können Sie eine Error Boundary erstellen, die je nach Art des aufgetretenen Fehlers eine andere Fallback-Benutzeroberfläche anzeigt.

Server-Side Rendering (SSR) mit Suspense

Suspense kann mit Server-Side Rendering (SSR) verwendet werden, um die anfängliche Seitenladeleistung zu verbessern. Bei der Verwendung von SSR können Sie den Anfangszustand Ihrer Anwendung auf dem Server vorrendern und dann den verbleibenden Inhalt an den Client streamen. Suspense ermöglicht es Ihnen, den asynchronen Datenabruf während des SSR zu handhaben und Ladeindikatoren anzuzeigen, während die Daten gestreamt werden.

Umgang mit verschiedenen Fehlerszenarien

Berücksichtigen Sie diese verschiedenen Fehlerszenarien und wie Sie damit umgehen können:

Globale Fehlerbehandlung

Implementieren Sie einen globalen Fehlerbehandlungsmechanismus, um Fehler abzufangen, die nicht von Error Boundaries abgefangen werden. Dies kann durch die Verwendung eines globalen Fehlerhandlers oder durch das Umschließen der gesamten Anwendung in einer Error Boundary erfolgen.

Praxisbeispiele und Anwendungsfälle

E-Commerce-Anwendung

In einer E-Commerce-Anwendung kann Suspense verwendet werden, um Ladeindikatoren beim Abrufen von Produktdaten anzuzeigen, und Error Boundaries können verwendet werden, um Fehler zu behandeln, die während des Checkout-Prozesses auftreten. Stellen Sie sich zum Beispiel einen Benutzer aus Japan vor, der einen Online-Shop in den Vereinigten Staaten durchstöbert. Das Laden der Produktbilder und -beschreibungen kann einige Zeit in Anspruch nehmen. Suspense kann eine einfache Ladeanimation anzeigen, während diese Daten von einem Server abgerufen werden, der sich möglicherweise auf der anderen Seite der Welt befindet. Wenn das Zahlungsgateway aufgrund eines vorübergehenden Netzwerkproblems ausfällt (was bei unterschiedlichen globalen Internet-Infrastrukturen häufig vorkommt), könnte eine Error Boundary eine benutzerfreundliche Nachricht anzeigen, die den Benutzer auffordert, es später erneut zu versuchen.

Social-Media-Plattform

In einer Social-Media-Plattform kann Suspense verwendet werden, um Ladeindikatoren beim Abrufen von Benutzerprofilen und Beiträgen anzuzeigen, und Error Boundaries können verwendet werden, um Fehler zu behandeln, die beim Laden von Bildern oder Videos auftreten. Ein Benutzer, der von Indien aus surft, könnte langsamere Ladezeiten für Medien erleben, die auf Servern in Europa gehostet werden. Suspense kann einen Platzhalter anzeigen, bis der Inhalt vollständig geladen ist. Wenn die Profildaten eines bestimmten Benutzers beschädigt sind (selten, aber möglich), kann eine Error Boundary verhindern, dass der gesamte Social-Media-Feed abstürzt, und stattdessen eine einfache Fehlermeldung wie "Benutzerprofil konnte nicht geladen werden" anzeigen.

Dashboard-Anwendung

In einer Dashboard-Anwendung kann Suspense verwendet werden, um Ladeindikatoren beim Abrufen von Daten aus mehreren Quellen anzuzeigen, und Error Boundaries können verwendet werden, um Fehler zu behandeln, die beim Laden von Diagrammen oder Grafiken auftreten. Ein Finanzanalyst in London, der auf ein globales Investment-Dashboard zugreift, lädt möglicherweise Daten von mehreren Börsen auf der ganzen Welt. Suspense kann Ladeindikatoren für jede Datenquelle bereitstellen. Wenn die API einer Börse ausfällt, kann eine Error Boundary eine Fehlermeldung speziell für die Daten dieser Börse anzeigen und so verhindern, dass das gesamte Dashboard unbrauchbar wird.

Fazit

React Suspense und Error Boundaries sind wesentliche Werkzeuge für die Erstellung robuster und benutzerfreundlicher React-Anwendungen. Durch die Verwendung von Suspense zur Verwaltung von Ladezuständen und Error Boundaries zur Behandlung unerwarteter Fehler können Sie die allgemeine Benutzererfahrung verbessern und den Entwicklungsprozess vereinfachen. Diese Anleitung hat einen umfassenden Überblick über Suspense und Error Boundaries gegeben und deckt alles von grundlegenden Konzepten bis hin zu fortgeschrittenen Techniken ab. Indem Sie die in diesem Artikel beschriebenen Best Practices befolgen, können Sie robuste und zuverlässige React-Anwendungen erstellen, die selbst die anspruchsvollsten Szenarien bewältigen können.

Da sich React ständig weiterentwickelt, werden Suspense und Error Boundaries wahrscheinlich eine immer wichtigere Rolle beim Aufbau moderner Webanwendungen spielen. Indem Sie diese Funktionen meistern, können Sie immer auf dem neuesten Stand bleiben und außergewöhnliche Benutzererfahrungen liefern.