Ons kan Sentry toets met 'n produksiebou deur die volgende in te voer:
yarn build
en van die bou-lêergids voer in:
npx http-server -c-1
Die probleem wat ons dadelik raakloop, is dat Sentry se foutrekords na lynnommers in die verkleinde bondel verwys; nie baie nuttig nie.
Die Sentry-diens verduidelik dit deur die bronkaarte vir die verminderde pakkie te trek nadat 'n fout ontvang is. In hierdie geval loop ons vanaf localhost (nie toeganklik vir die Sentry-diens nie).
Oplossings (Bronkaarte)
Die oplossing vir hierdie probleem is om die toepassing vanaf 'n publieke webbediener te laat loop. Een eenvoudige antwoordknoppie om die GitHub Pages-diens (gratis) te gebruik. Die stappe om te gebruik is gewoonlik soos volg:
Kopieer die inhoud van die gids bou na die gids Dokumente in die wortelgids van die bewaarplek.
Sit aan GitHub-bladsye in die bewaarplek (vanaf GitHub) om die docs-lêergids in te gebruik meester takke
Druk veranderinge na GitHub
Let daarop: nadat ek uitgevind het wat ek moet gebruik skep-skep-app tuisbladfunksie om die toepassing te begin. Het afgekom om die volgende by package.json by te voeg:
Hierdie foutverslag kon nie duideliker wees nie, BRAVO.
Illustrasie van Onverantwoorde foute
Net so, kom ons gaan deur die knoppie klik fout.
Met 'n fout wat soos volg verskyn:
Beter hantering van onverantwoorde foute (weergawe)
Bekendstelling van foutlimiete
'n JavaScript-fout in 'n deel van die gebruikerskoppelvlak behoort nie die hele toepassing te breek nie. Om hierdie probleem vir React-gebruikers op te los, stel React 16 'n nuwe konsep bekend genaamd "error bounds".
Foutgrense is React-komponente wat JavaScript-foute op enige plek in hul kinderkomponentboom opvang, daardie foute aanteken en 'n terugval-UI lewer in plaas van die komponentboom wat neergestort het. Foutgrense vang foute op tydens lewering, in lewensiklusmetodes en in die konstrukteurs van die hele boom daaronder.
...
Nuwe gedrag vir onopgemerkte foute
Hierdie verandering is betekenisvol. Vanaf React 16 sal foute wat nie deur enige foutgrens opgevang is nie, daartoe lei dat die hele React-komponentboom gedemonteer word.
'n Belangrike verduideliking wat my 'n rukkie geneem het voordat ek dit besef het, is dit bogenoemde gedrag werk slegs met foute wat in die leweringmetode gegooi word (of meer waarskynlik in enige van die lewensiklusmetodes). Byvoorbeeld, die gebruik van foutgrense sal niks help met ons knoppie nie fout; hierdie fout was in die klikhanteerder.
Kom ons skep 'n voorbeeldweergawe fout en gebruik dan foutgrense om die fout meer grasieus te hanteer.
Wanneer jy die knoppie druk, reageer sal vertoon word vlag.busted.bedrog, wat 'n fout genereer
Sonder 'n foutgrens sal die hele komponentboom gedemonteer word
Dan skryf ons ons foutgrenskode (gebruik die nuwe lewensiklusmetode komponentDidCatch); dit is in wese die voorbeeld wat in Dan Abramov se artikel gegee word:
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;
}
}