Eesti

Õppige React Suspense ja Error Boundaries'e, et hallata laadimisseisundeid ja vigu sujuvalt, luues vastupidavaid ja kasutajasõbralikke rakendusi.

React Suspense ja Error Boundaries: Täiustatud laadimise ja vigade käsitlemine

React Suspense ja Error Boundaries on võimsad funktsioonid, mis võimaldavad arendajatel luua vastupidavamaid ja kasutajasõbralikumaid rakendusi. Need pakuvad deklaratiivset viisi laadimisseisundite ja ootamatute vigade käsitlemiseks, parandades üldist kasutajakogemust ja lihtsustades arendusprotsessi. See artikkel pakub põhjalikku juhendit React Suspense'i ja Error Boundaries'e tõhusaks kasutamiseks, hõlmates kõike alates põhimõistetest kuni täiustatud tehnikateni.

React Suspense'i mõistmine

React Suspense on mehhanism, mis "peatab" komponendi renderdamise, kuni teatud tingimus on täidetud, tavaliselt andmete kättesaadavus asünkroonsest operatsioonist. See võimaldab teil kuvada varu-kasutajaliidest (fallback UI), näiteks laadimisindikaatoreid, andmete laadimise ootamise ajal. Suspense lihtsustab laadimisseisundite haldamist, kaotades vajaduse käsitsi tingimusliku renderdamise järele ja parandades koodi loetavust.

Suspense'i põhimõisted

Suspense'i põhirakendus

Siin on lihtne näide, kuidas kasutada Suspense'i laadimisindikaatori kuvamiseks andmete pärimise ajal:


import React, { Suspense } from 'react';

// Simuleerib andmete pärimist (nt API-st)
const fetchData = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ name: 'John Doe', age: 30 });
    }, 2000);
  });
};

// Loob ressursi, mida Suspense saab kasutada
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, mis loeb ressursist
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( Laen kasutaja andmeid...
}> ); }; export default App;

Selles näites:

Suspense koos koodi tükeldamisega

Suspense'i saab kasutada ka koos `React.lazy`-ga koodi tükeldamise rakendamiseks. See võimaldab teil laadida komponente ainult siis, kui neid on vaja, parandades lehe esialgset laadimisjõudlust.


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

// Laadige MyComponent komponent laisalt (lazy load)
const MyComponent = lazy(() => import('./MyComponent'));

const App = () => {
  return (
    Laen komponenti...}>
      
    
  );
};

export default App;

Selles näites:

Error Boundaries'e mõistmine

Error Boundaries on Reacti komponendid, mis püüavad kinni JavaScripti vead oma alamkomponentide puus, logivad need vead ja kuvavad terve rakenduse kokkujooksmise asemel varu-kasutajaliidest. Need pakuvad viisi ootamatute vigade sujuvaks käsitlemiseks, parandades kasutajakogemust ja muutes teie rakenduse vastupidavamaks.

Error Boundaries'e põhimõisted

Error Boundaries'e põhirakendus

Siin on lihtne näide, kuidas luua Error Boundary:


import React, { Component } from 'react';

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

  static getDerivedStateFromError(error) {
    // Uuenda olekut, et järgmine renderdus näitaks varu-kasutajaliidest.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Saate vea logida ka vearaportiteenusesse
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Saate renderdada mis tahes kohandatud varu-kasutajaliidese
      return 

Midagi läks valesti.

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

Selles näites:

Error Boundaries'e kasutamine

Et kasutada `ErrorBoundary` komponenti, ümbritsege sellega lihtsalt komponendid, mida soovite kaitsta:


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

const MyComponent = () => {
  // Simuleeri viga
  throw new Error('Ilmnes viga!');
};

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

export default App;

Selles näites, kui `MyComponent`'is ilmneb viga, püüab `ErrorBoundary` komponent vea kinni ja kuvab varu-kasutajaliidese.

Suspense'i ja Error Boundaries'e kombineerimine

Suspense'i ja Error Boundaries'e saab kombineerida, et pakkuda asünkroonsete operatsioonide jaoks tugevat ja põhjalikku vigade käsitlemise strateegiat. Ümbritsedes komponente, mis võivad peatuda, nii Suspense'i kui ka Error Boundaries'ega, saate sujuvalt käsitleda nii laadimisseisundeid kui ka ootamatuid vigu.

Suspense'i ja Error Boundaries'e kombineerimise näide


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

// Simuleerib andmete pärimist (nt API-st)
const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // Simuleeri edukat andmete pärimist
      // resolve({ name: 'John Doe', age: 30 });

      // Simuleeri viga andmete pärimise ajal
      reject(new Error('Kasutaja andmete pärimine ebaõnnestus'));

    }, 2000);
  });
};

// Loob ressursi, mida Suspense saab kasutada
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, mis loeb ressursist
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( Laen kasutaja andmeid...}> ); }; export default App;

Selles näites:

Täiustatud tehnikad ja parimad praktikad

Suspense'i jõudluse optimeerimine

Kohandatud Error Boundaries

Saate luua kohandatud Error Boundaries'e, et käsitleda teatud tüüpi vigu või pakkuda informatiivsemaid veateateid. Näiteks saate luua Error Boundary, mis kuvab erineva varu-kasutajaliidese sõltuvalt ilmnenud vea tüübist.

Serveripoolne renderdamine (SSR) koos Suspense'iga

Suspense'i saab kasutada serveripoolse renderdamisega (SSR), et parandada lehe esialgset laadimisjõudlust. SSR-i kasutamisel saate oma rakenduse esialgse oleku serveris eelrenderdada ja seejärel voogesitada ülejäänud sisu kliendile. Suspense võimaldab teil käsitleda asünkroonset andmete pärimist SSR-i ajal ja kuvada laadimisindikaatoreid andmete voogesituse ajal.

Erinevate veastsenaariumide käsitlemine

Kaaluge neid erinevaid veastsenaariume ja kuidas neid käsitleda:

Globaalne vigade käsitlemine

Rakendage globaalne vigade käsitlemise mehhanism, et püüda kinni vigu, mida Error Boundaries ei püüa. Seda saab teha, kasutades globaalset veakäsitlejat või ümbritsedes kogu rakenduse Error Boundary'ga.

Reaalse maailma näited ja kasutusjuhud

E-kaubanduse rakendus

E-kaubanduse rakenduses saab Suspense'i kasutada laadimisindikaatorite kuvamiseks tooteandmete pärimise ajal ja Error Boundaries'e saab kasutada kassaprotsessi käigus tekkivate vigade käsitlemiseks. Kujutage näiteks ette Jaapani kasutajat, kes sirvib Ameerika Ühendriikides asuvat veebipoodi. Tootepiltide ja kirjelduste laadimine võib aega võtta. Suspense saab kuvada lihtsa laadimisanimatsiooni, kuni neid andmeid laaditakse serverist, mis võib asuda teisel pool maailma. Kui maksevärav ebaõnnestub ajutise võrguprobleemi tõttu (mis on levinud erinevate interneti infrastruktuuride puhul üle maailma), võiks Error Boundary kuvada kasutajasõbraliku teate, mis palub tal hiljem uuesti proovida.

Sotsiaalmeedia platvorm

Sotsiaalmeedia platvormil saab Suspense'i kasutada laadimisindikaatorite kuvamiseks kasutajaprofiilide ja postituste pärimise ajal ning Error Boundaries'e saab kasutada piltide või videote laadimisel tekkivate vigade käsitlemiseks. Indiast pärit kasutaja võib kogeda aeglasemat laadimisaega meedia puhul, mida majutatakse Euroopas asuvates serverites. Suspense saab näidata kohatäidet, kuni sisu on täielikult laaditud. Kui konkreetse kasutaja profiiliandmed on rikutud (haruldane, kuid võimalik), saab Error Boundary vältida kogu sotsiaalmeedia voo kokkujooksmist, kuvades selle asemel lihtsa veateate nagu "Kasutajaprofiili laadimine ebaõnnestus".

Töölauarakendus

Töölauarakenduses saab Suspense'i kasutada laadimisindikaatorite kuvamiseks andmete pärimisel mitmest allikast ning Error Boundaries'e saab kasutada diagrammide või graafikute laadimisel tekkivate vigade käsitlemiseks. Londonis asuv finantsanalüütik, kes kasutab globaalset investeeringute töölauda, võib laadida andmeid mitmelt börsilt üle maailma. Suspense saab pakkuda laadimisindikaatoreid iga andmeallika jaoks. Kui ühe börsi API on maas, saab Error Boundary kuvada veateate spetsiifiliselt selle börsi andmete kohta, takistades kogu töölaua kasutuskõlbmatuks muutumist.

Kokkuvõte

React Suspense ja Error Boundaries on olulised tööriistad vastupidavate ja kasutajasõbralike Reacti rakenduste ehitamiseks. Kasutades Suspense'i laadimisseisundite haldamiseks ja Error Boundaries'e ootamatute vigade käsitlemiseks, saate parandada üldist kasutajakogemust ja lihtsustada arendusprotsessi. See juhend on andnud põhjaliku ülevaate Suspense'ist ja Error Boundaries'est, hõlmates kõike alates põhimõistetest kuni täiustatud tehnikateni. Järgides selles artiklis kirjeldatud parimaid praktikaid, saate ehitada tugevaid ja usaldusväärseid Reacti rakendusi, mis suudavad toime tulla ka kõige keerulisemate stsenaariumidega.

Kuna React areneb pidevalt, mängivad Suspense ja Error Boundaries tõenäoliselt üha olulisemat rolli kaasaegsete veebirakenduste ehitamisel. Neid funktsioone omandades saate olla arengu esirinnas ja pakkuda erakordseid kasutajakogemusi.