Ongelma, johon törmäämme välittömästi, on se, että Sentryn virhetietueet viittaavat pienennetyn erän rivinumeroihin; ei kovin hyödyllinen.
Sentry-palvelu selittää tämän vetämällä pienennetyn paketin lähdekartat virheen saatuaan. Tässä tapauksessa käytämme localhost-palvelua (ei Sentry-palvelun käytettävissä).
Ratkaisut (lähdekartat)
Ratkaisu tähän ongelmaan on suorittaa sovellus julkiselta verkkopalvelimelta. Yksi yksinkertainen vastauspainike GitHub Pages -palvelun käyttöön (ilmainen). Käytettävät vaiheet ovat yleensä seuraavat:
Kopioi kansion sisältö rakentaa kansioon docs arkiston juurihakemistossa.
Käynnistä GitHub-sivut arkistossa (GitHubista) käyttääksesi docs-kansiota mestari oksat
Työnnä muutokset GitHubiin
Huomata: sen jälkeen kun olen selvittänyt mitä minun pitää käyttää luo-luo-sovellus kotisivutoiminto sovelluksen käynnistämiseksi. Päädyttiin seuraavan lisäämiseen package.json-tiedostoon:
Tämä virheraportti ei voisi olla selkeämpi, BRAVO.
Kuva huomaamattomista virheistä
Samoin käydään läpi painikkeen napsautus Virhe.
Virhe ilmestyy näin:
Käsittelemättömien virheiden parempi käsittely (renderöinti)
Virherajojen käyttöönotto
JavaScript-virhe osassa käyttöliittymää ei saa rikkoa koko sovellusta. Tämän React-käyttäjien ongelman ratkaisemiseksi React 16 esittelee uuden käsitteen nimeltä "virherajat".
Virherajat ovat React-komponentteja, jotka havaitsevat JavaScript-virheet missä tahansa alikomponenttipuussaan, kirjaavat nämä virheet ja luovat varakäyttöliittymän kaatuneen komponenttipuun sijaan. Virherajat havaitsevat virheet renderöinnin aikana, elinkaarimenetelmissä ja koko niiden alla olevan puun rakentajissa.
...
Uusi toimintatapa havaitsemattomille virheille
Tämä muutos on merkittävä. React 16:sta lähtien virheet, joita mikään virheraja ei havaitse, johtavat koko React-komponenttipuun irrottamiseen.
Tärkeä selvennys, joka kesti hetken ennen kuin tajusin tämän yllä oleva käyttäytyminen toimii vain renderöintimenetelmässä (tai todennäköisemmin missä tahansa elinkaarimenetelmässä) esiintyvien virheiden kanssa.. Esimerkiksi virherajojen käyttäminen ei tekisi mitään hyvää painikkeellemme Virhe; tämä virhe oli napsautusten käsittelyssä.
Luodaan esimerkki renderöintivirheestä ja käytä sitten virherajoja käsitelläksesi virhettä sulavammin.
Kun painat painiketta, suhtautua tulee näkyviin lippu.rikottu.väärin, joka aiheuttaa virheen
Ilman virherajaa koko komponenttipuu irrotetaan
Sitten kirjoitamme virherajakoodimme (käyttää uutta elinkaarimenetelmää komponenttiDidCatch); tämä on pohjimmiltaan Dan Abramovin artikkelissa annettu esimerkki:
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;
}
}