Vi kan teste Sentry med en produktionsbygning ved at indtaste:
yarn build
og fra build-mappen indtast:
npx http-server -c-1
Det problem, vi umiddelbart støder på, er, at Sentrys fejlregistreringer refererer til linjenumre i den minificerede batch; ikke særlig brugbar.
Sentry-tjenesten forklarer dette ved at trække kildekortene til den reducerede pakke efter at have modtaget en fejl. I dette tilfælde kører vi fra localhost (ikke tilgængelig for Sentry-tjenesten).
Løsninger (kildekort)
Løsningen på dette problem er at køre programmet fra en offentlig webserver. En simpel svarknap for at bruge GitHub Pages-tjenesten (gratis). De trin, der skal bruges, er normalt som følger:
Kopier indholdet af mappen bygge til en mappe docs i rodbiblioteket i depotet.
Tænde for GitHub-sider i repository (fra GitHub) for at bruge docs-mappen i Master grene
Skub ændringer til GitHub
Bemærk: efter at jeg fandt ud af hvad jeg skal bruge opret-opret-app startsidefunktion for at starte applikationen. Kom ned til at tilføje følgende til package.json:
Bedre håndtering af urapporterede fejl (gengivelse)
Introduktion af fejlgrænser
En JavaScript-fejl i en del af brugergrænsefladen bør ikke ødelægge hele applikationen. For at løse dette problem for React-brugere introducerer React 16 et nyt koncept kaldet "error bounds".
Fejlgrænser er React-komponenter, der fanger JavaScript-fejl hvor som helst i deres underordnede komponenttræ, logger disse fejl og gengiver en reserve-brugergrænseflade i stedet for komponenttræet, der gik ned. Fejlgrænser fanger fejl under gengivelse, i livscyklusmetoder og i konstruktørerne af hele træet under dem.
...
Ny adfærd for uopdagede fejl
Denne ændring er væsentlig. Fra React 16 vil fejl, der ikke blev fanget af nogen fejlgrænse, resultere i, at hele React-komponenttræet afmonteres.
En vigtig afklaring, der tog mig et stykke tid, før jeg indså dette, er det ovenstående adfærd virker kun med fejl, der er smidt i gengivelsesmetoden (eller mere sandsynligt i en af livscyklusmetoderne). For eksempel ville brug af fejlgrænser ikke gøre noget godt med vores knap Fejl; denne fejl var i klikhåndteringen.
Lad os oprette et eksempel på gengivelsesfejl og derefter bruge fejlgrænser til at håndtere fejlen mere elegant.
Når du trykker på knappen, Reagerer vil blive vist flag.busted.falsk, hvilket genererer en fejl
Uden en fejlgrænse vil hele komponenttræet blive afmonteret
Derefter skriver vi vores fejlgrænsekode (bruger den nye livscyklusmetode componentDidCatch); dette er i bund og grund eksemplet givet i Dan Abramovs artikel:
react-app/src/ErrorBoundary.js
import React, { Component } from 'react';
import * as Sentry from '@sentry/browser';
export default class ErrorBoundary extends Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
componentDidCatch(err, info) {
this.setState({ hasError: true });
Sentry.captureException(err);
}
render() {
if (this.state.hasError) {
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}