Norsk

Mestre React Suspense og Feilgrenser for robust håndtering av lastetilstand og elegant feilhåndtering. Lær å bygge robuste og brukervennlige applikasjoner.

React Suspense og Feilgrenser: Avansert lasting og feilhåndtering

React Suspense og Feilgrenser er kraftige funksjoner som lar utviklere bygge mer robuste og brukervennlige applikasjoner. De gir en deklarativ måte å håndtere lastetilstander og uventede feil på, noe som forbedrer den generelle brukeropplevelsen og forenkler utviklingsprosessen. Denne artikkelen gir en omfattende guide til hvordan du bruker React Suspense og Feilgrenser effektivt, og dekker alt fra grunnleggende konsepter til avanserte teknikker.

Forstå React Suspense

React Suspense er en mekanisme for å "utsette" gjengivelsen av en komponent til en bestemt betingelse er oppfylt, vanligvis tilgjengeligheten av data fra en asynkron operasjon. Dette lar deg vise fallback UI, for eksempel lastingindikatorer, mens du venter på at dataene skal lastes inn. Suspense forenkler håndteringen av lastetilstander, eliminerer behovet for manuell betinget gjengivelse og forbedrer lesbarheten av koden.

Nøkkelkonsepter for Suspense

Grunnleggende implementering av Suspense

Her er et enkelt eksempel på hvordan du bruker Suspense til å vise en lastingindikator mens du henter data:


import React, { Suspense } from 'react';

// Simuler henting av data (f.eks. fra et API)
const fetchData = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ name: 'John Doe', age: 30 });
    }, 2000);
  });
};

// Opprett en ressurs som Suspense kan bruke
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);

// Komponent som leser fra ressursen
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( Loading user data...
}> ); }; export default App;

I dette eksemplet:

Suspense med kodesplitting

Suspense kan også brukes med React.lazy for å implementere kodesplitting. Dette lar deg laste inn komponenter bare når de trengs, noe som forbedrer ytelsen ved første sideinnlasting.


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

// Lat inn MyComponent-komponenten
const MyComponent = lazy(() => import('./MyComponent'));

const App = () => {
  return (
    Loading component...}>
      
    
  );
};

export default App;

I dette eksemplet:

Forstå feilgrenser

Feilgrenser er React-komponenter som fanger JavaScript-feil hvor som helst i deres underkomponenttre, logger disse feilene og viser en fallback-UI i stedet for å krasje hele applikasjonen. De gir en måte å elegant håndtere uventede feil på, noe som forbedrer brukeropplevelsen og gjør applikasjonen din mer robust.

Nøkkelkonsepter for feilgrenser

Grunnleggende implementering av feilgrenser

Her er et enkelt eksempel på hvordan du oppretter en feilgrense:


import React, { Component } from 'react';

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

  static getDerivedStateFromError(error) {
    // Oppdater tilstanden slik at neste gjengivelse vil vise fallback UI.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Du kan også logge feilen til en feilrapporteringstjeneste
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Du kan gjengi en hvilken som helst tilpasset fallback UI
      return 

Noe gikk galt.

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

I dette eksemplet:

Bruke feilgrenser

For å bruke `ErrorBoundary`-komponenten, er det bare å omslutte komponentene du vil beskytte med den:


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

const MyComponent = () => {
  // Simuler en feil
  throw new Error('En feil oppstod!');
};

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

export default App;

I dette eksemplet, hvis det oppstår en feil i `MyComponent`, vil `ErrorBoundary`-komponenten fange feilen og vise fallback UI-en.

Kombinere Suspense og feilgrenser

Suspense og feilgrenser kan kombineres for å gi en robust og omfattende feilhåndteringsstrategi for asynkrone operasjoner. Ved å omslutte komponenter som kan utsettes med både Suspense og feilgrenser, kan du håndtere både lastetilstander og uventede feil på en elegant måte.

Eksempel på kombinering av Suspense og feilgrenser


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

// Simuler henting av data (f.eks. fra et API)
const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // Simuler en vellykket datahenting
      // resolve({ name: 'John Doe', age: 30 });

      // Simuler en feil under datahenting
      reject(new Error('Klarte ikke å hente brukerdata'));

    }, 2000);
  });
};

// Opprett en ressurs som Suspense kan bruke
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);

// Komponent som leser fra ressursen
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( Loading user data...}> ); }; export default App;

I dette eksemplet:

Avanserte teknikker og beste praksis

Optimalisere Suspense-ytelsen

Tilpassede feilgrenser

Du kan opprette tilpassede feilgrenser for å håndtere spesifikke typer feil eller for å gi mer informative feilmeldinger. For eksempel kan du opprette en feilgrense som viser en annen fallback UI basert på typen feil som oppstod.

Server-Side Rendering (SSR) med Suspense

Suspense kan brukes med Server-Side Rendering (SSR) for å forbedre ytelsen ved første sideinnlasting. Når du bruker SSR, kan du forhåndsgjengi den innledende tilstanden til applikasjonen din på serveren og deretter strømme det gjenværende innholdet til klienten. Suspense lar deg håndtere asynkron datahenting under SSR og vise lastingindikatorer mens dataene strømmes.

Håndtere forskjellige feilscenarier

Vurder disse forskjellige feilscenariene og hvordan du håndterer dem:

Global feilhåndtering

Implementer en global feilhåndteringsmekanisme for å fange feil som ikke fanges opp av feilgrenser. Dette kan gjøres ved å bruke en global feilhåndterer eller ved å omslutte hele applikasjonen i en feilgrense.

Virkelige eksempler og brukstilfeller

E-handelsapplikasjon

I en e-handelsapplikasjon kan Suspense brukes til å vise lastingindikatorer mens du henter produktdata, og feilgrenser kan brukes til å håndtere feil som oppstår under utsjekkingsprosessen. Tenk deg for eksempel en bruker fra Japan som surfer i en nettbutikk som ligger i USA. Produktbilder og beskrivelser kan ta litt tid å laste inn. Suspense kan vise en enkel lastingsanimasjon mens disse dataene hentes fra en server som muligens er halvveis rundt jorden. Hvis betalingsgatewayen mislykkes på grunn av et midlertidig nettverksproblem (vanlig på tvers av forskjellige internettinfrastrukturer globalt), kan en feilgrense vise en brukervennlig melding som ber dem om å prøve igjen senere.

Sosiale medieplattform

I en sosial medieplattform kan Suspense brukes til å vise lastingindikatorer mens du henter brukerprofiler og innlegg, og feilgrenser kan brukes til å håndtere feil som oppstår når du laster inn bilder eller videoer. En bruker som surfer fra India kan oppleve tregere lastetider for medier som hostes på servere i Europa. Suspense kan vise en plassholder til innholdet er fullstendig lastet inn. Hvis en bestemt brukers profildata er korrupte (sjelden, men mulig), kan en feilgrense hindre at hele feeden på sosiale medier krasjer, og i stedet vise en enkel feilmelding som "Kan ikke laste brukerprofil".

Dashboard-applikasjon

I en dashboard-applikasjon kan Suspense brukes til å vise lastingindikatorer mens du henter data fra flere kilder, og feilgrenser kan brukes til å håndtere feil som oppstår når du laster inn diagrammer eller grafer. En finansanalytiker i London som får tilgang til et globalt investeringsdashbord, kan laste inn data fra flere børser rundt om i verden. Suspense kan gi lastingindikatorer for hver datakilde. Hvis API-et til en børs er nede, kan en feilgrense vise en feilmelding spesielt for den børsens data, og hindre at hele dashbordet blir ubrukelig.

Konklusjon

React Suspense og Feilgrenser er viktige verktøy for å bygge robuste og brukervennlige React-applikasjoner. Ved å bruke Suspense til å håndtere lastetilstander og feilgrenser til å håndtere uventede feil, kan du forbedre den generelle brukeropplevelsen og forenkle utviklingsprosessen. Denne guiden har gitt en omfattende oversikt over Suspense og feilgrenser, og dekker alt fra grunnleggende konsepter til avanserte teknikker. Ved å følge de beste fremgangsmåtene som er skissert i denne artikkelen, kan du bygge robuste og pålitelige React-applikasjoner som kan håndtere selv de mest utfordrende scenariene.

Ettersom React fortsetter å utvikle seg, vil Suspense og feilgrenser sannsynligvis spille en stadig viktigere rolle i å bygge moderne webapplikasjoner. Ved å mestre disse funksjonene kan du ligge i forkant og levere eksepsjonelle brukeropplevelser.