Við getum prófað Sentry með framleiðslugerð með því að slá inn:
yarn build
og úr build möppunni sláðu inn:
npx http-server -c-1
Vandamálið sem við lendum strax í er að villuskráningar Sentry vísa til línunúmera í smækkaðri lotunni; ekki mjög gagnlegt.
Sentry þjónustan útskýrir þetta með því að draga upprunakortin fyrir minnkaða pakkann eftir að hafa fengið villu. Í þessu tilfelli erum við að keyra frá localhost (ekki aðgengilegt fyrir Sentry þjónustuna).
Lausnir (heimildakort)
Lausnin á þessu vandamáli er að keyra forritið frá opinberum vefþjóni. Einn einfaldur svarhnappur til að nota GitHub Pages þjónustuna (ókeypis). Skrefin til að nota eru venjulega sem hér segir:
Afritaðu innihald möppunnar byggja í möppu docs í rótarskrá geymslunnar.
Kveikja á GitHub síður í geymslunni (frá GitHub) til að nota skjöl möppuna í húsbóndi útibú
Ýttu á breytingar á GitHub
Athugið: eftir að ég fann út hvað ég þarf að nota búa til-búa-app heimasíðuaðgerð til að ræsa forritið. Kom að því að bæta eftirfarandi við package.json:
Við skulum ganga í gegnum með því að smella á Halló hnappinn.
Með villu sem birtist svona:
Athuganir:
Þessi villuskýrsla gæti ekki verið skýrari, BRAVÓ.
Myndskreyting af óuppgerðum villum
Sömuleiðis skulum við fara í gegnum smellihnappinn villa.
Með villu sem birtist svona:
Betri meðhöndlun á ótilgreindum villum (flutningur)
Kynning á villumörkum
JavaScript villa í hluta notendaviðmótsins ætti ekki að brjóta allt forritið. Til að leysa þetta vandamál fyrir React notendur kynnir React 16 nýtt hugtak sem kallast „villumörk“.
Villumörk eru React íhlutir sem fanga JavaScript villur hvar sem er í undirhlutatré þeirra, skrá þessar villur og gera varaviðmót í stað íhlutatrésins sem hrundi. Villumörk grípa villur við flutning, í lífsferilsaðferðum og í smiðjum alls trésins fyrir neðan þau.
...
Ný hegðun fyrir óuppgötvaðar villur
Þessi breyting er veruleg. Frá og með React 16 munu villur sem voru ekki gripnar af neinum villumörkum leiða til þess að allt React íhlutatréð verður tekið af.
Mikilvæg skýring sem tók mig smá tíma áður en ég áttaði mig á þessu er þessi ofangreind hegðun virkar aðeins með villum sem kastað er í render aðferðina (eða líklegra í einhverri lífsferilsaðferðinni). Til dæmis, að nota villumörk myndi ekki gera neitt gott með hnappinn okkar villa; þessi villa var í smellaforritinu.
Við skulum búa til dæmi um flutningsvillu og nota síðan villumörk til að meðhöndla villuna af meiri þokka.
Þegar þú ýtir á hnappinn, Bregðast verður birt flag.busted.falus, sem myndar villu
Án villumarka verður allt íhlutatréð tekið af
Síðan skrifum við villumarkakóðann okkar (notar nýju lífsferilsaðferðina componentDidCatch); þetta er í rauninni dæmið sem gefið er upp í grein Dan Abramov:
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;
}
}