Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Hvis du har jobbet med React en stund, kan det hende du har møtt en melding som lyder "Vurder å legge til en feilgrense til treet ditt for å tilpasse feilhåndteringsatferd." Du har kanskje sett dette i nettleserkonsollen når komponentene dine brak.

React anbefaler å bruke en feilgrense for å gi en bedre brukeropplevelse når en feil oppstår.

Hva er feilgrenseklassen i React?

Feilgrenser fungerer som prøv/fang blokk i vanilje JavaScript. Forskjellen er at de fanger opp feilene som oppstår i React-komponenter. Hvis det oppstår en feil i en brukergrensesnittkomponent, demonterer React treet i den komponenten og erstatter det med reservegrensesnittet du har definert. Dette betyr at en feil kun påvirker komponenten den oppstår i og resten av applikasjonen fungerer som forventet.

Ifølge Reager dokumentasjon, feilgrenseklasser fanger ikke opp feil i:

  • Hendelsesbehandlere.
  • Asynkron kode.
  • Kode på serversiden.
  • Feil kastet i selve feilgrensen (snarere enn dens barn).

For de ovennevnte feilene kan du bruke try/catch-blokken.

For eksempel for å fange en feil som oppstår i hendelsesbehandler, bruk følgende kode:

funksjonEventComponent() {
konst [error, setError] = useState(null)

konst handleClick = () => {
prøve {
// Gjør noe
} å fange (feil) {
setError (feil)
}
}

komme tilbake (
<>
<div>{feil? feil: ""}div>
<knappved trykk={handleClick}>Knappknapp>

)
}

Bruk feilgrenser kun for å fange opp feil i React-komponenter.

Opprette en feilgrenseklasse

Du kan opprette en feilgrense ved å definere en klasse som inneholder én eller begge av følgende metoder:

  • statisk getDerivedStateFromError()
  • componentDidCatch()

GetDerivedStateFromError()-funksjonen oppdaterer komponenttilstanden når feilen er fanget, mens du kan bruke componentDidCatch() til å logge feilinformasjon til konsollen. Du kan også sende feilene til en feilmeldingstjeneste.

Nedenfor er et eksempel som viser hvordan du lager en enkel feilgrenseklasse.

klasseFeilgrensestrekkerReagere.Komponent{
konstruktør(Rekvisitter) {
super(Rekvisitter);
dette.state = { feil: falsk };
}

statiskgetDerivedStateFromError(feil){
// Oppdater tilstanden slik at neste gjengivelse viser reservegrensesnittet.
komme tilbake { feil: feil };
}

componentDidCatch (feil, errorInfo) {
// Logg feilen til en feilrapporteringstjeneste
}

render() {
hvis (dette.stat.feil) {
// Opprett et tilpasset reservegrensesnitt her
komme tilbake<h1>Det ser ut til å være et problem.h1>;
}

komme tilbakedette.rekvisitter.barn;
}
}

eksportmisligholde ErrorBoundary;

Når det oppstår en feil, vil getDerivedStateFromError() oppdatere tilstanden og følgelig utløse en gjengivelse som viser reservegrensesnittet.

Hvis du ikke vil opprette feilgrenseklassen fra bunnen av, bruk react-error-boundary NPM-pakke. Denne pakken inneholder ErrorBoundary-komponenten som omslutter komponenter du tror kan gi feil.

Bruke feilgrenseklassen

For å håndtere feil, pakk komponenter med feilgrenseklassekomponenten. Du kan pakke inn toppnivåkomponenten eller individuelle komponenter.

Hvis du pakker inn toppnivåkomponenten, vil feilgrenseklassen håndtere feilene som genereres av alle komponentene i React-applikasjonen.

<Feilgrense>
<App/>
Feilgrense>

Hvis du bryter en individuell komponent med en Error Boundary, vil ikke en feil i den komponenten påvirke hvordan en annen komponent gjengis.

<Feilgrense>
<Profil/>
Feilgrense>

For eksempel vil en feil i profilkomponenten ikke påvirke hvordan en annen komponent som Hero-komponenten gjengis. Selv om profilkomponenten kan krasje, vil resten av programmet fungere fint. Dette er mye bedre enn å gjengi den generiske hvite reserveskjermen levert av React.

Håndtering av feil i JavaScript

Programmeringsfeil kan være frustrerende for utviklere og brukere. Unnlatelse av å håndtere feil kan utsette brukerne dine for stygg brukergrensesnitt med vanskelige å forstå feilmeldinger.

Når du bygger din React-komponent, lag en feilgrenseklasse enten fra bunnen av eller bruk react-error-boundary-pakken for å vise brukervennlige feilmeldinger.