Galime išbandyti „Sentry“ su gamybos versija įvesdami:
yarn build
ir iš kūrimo aplanko įveskite:
npx http-server -c-1
Problema, su kuria iš karto susiduriame, yra ta, kad „Sentry“ klaidų įrašai nurodo eilučių numerius sumažintoje partijoje; nelabai naudinga.
„Sentry“ paslauga tai paaiškina ištraukdama sumažinto paketo šaltinio žemėlapius, gavusi klaidą. Šiuo atveju mes veikiame iš localhost (nepasiekiama Sentry paslaugai).
Sprendimai (šaltinio žemėlapiai)
Šios problemos sprendimas yra paleisti programą iš viešojo žiniatinklio serverio. Vienas paprastas atsakymo mygtukas, skirtas naudoti „GitHub Pages“ paslaugą (nemokama). Paprastai naudojami šie veiksmai:
Nukopijuokite aplanko turinį statyti į aplanką docs saugyklos šakniniame kataloge.
Įjungti „GitHub“ puslapiai saugykloje (iš „GitHub“), kad galėtumėte naudoti dokumentų aplanką meistras šakos
Perkelkite pakeitimus į „GitHub“.
Atkreipti dėmesį: po to, kai supratau, ką man reikia naudoti kurti-kurti-programėlę pagrindinio puslapio funkciją, kad paleistumėte programą. Prie package.json buvo pridėta:
„JavaScript“ klaida dalyje vartotojo sąsajos neturėtų pažeisti visos programos. Norėdami išspręsti šią „React“ vartotojų problemą, „React 16“ pristato naują koncepciją, vadinamą „klaidų ribomis“.
Klaidų ribos yra „React“ komponentai, kurie užfiksuoja „JavaScript“ klaidas bet kurioje antrinio komponento medžio vietoje, užregistruoja tas klaidas ir pateikia atsarginę vartotojo sąsają, o ne komponentų medį, kuris užstrigo. Klaidų ribos užfiksuoja klaidas atvaizdavimo metu, gyvavimo ciklo metoduose ir viso po jomis esančio medžio konstruktoriuose.
...
Nauja elgsena neaptiktoms klaidoms
Šis pokytis yra reikšmingas. Nuo React 16 klaidų, kurių nepagavo jokia klaidų riba, visas React komponentų medis bus atjungtas.
Svarbus paaiškinimas, kuris užtruko, kol tai supratau pirmiau nurodytas veiksmas veikia tik su klaidomis, įvestomis pateikimo metodu (arba labiau tikėtina bet kuriame gyvavimo ciklo metodu). Pavyzdžiui, naudojant klaidų ribas mūsų mygtukas nepadės nieko gero klaida; ši klaida buvo paspaudimų tvarkyklėje.
Sukurkime atvaizdavimo klaidos pavyzdį ir tada naudokite klaidų ribas, kad klaidą ištaisytume grakščiau.
Kai paspausite mygtuką, Reaguoti будет отображаться vėliava.nulaužta.netikras, kuris sukuria klaidą
Be klaidos ribos bus atjungtas visas komponentų medis
Tada parašome savo klaidos ribos kodą (naudojame naują gyvavimo ciklo metodą komponentasDidCatch); iš esmės tai yra Dano Abramovo straipsnyje pateiktas pavyzdys:
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;
}
}