A React frontend alkalmazások hibáinak távoli megfigyelése
A Sentry és a React használatát vizsgáljuk.
Ez a cikk egy sorozat része, amely a Sentry hibák jelentésével kezdődik egy példa segítségével: Часть 1.
A React megvalósítása
Először hozzá kell adnunk egy új Sentry projektet ehhez az alkalmazáshoz; a Sentry webhelyről. Ebben az esetben a Reactet választjuk.
A két gombunkat, a Hello és Error gombot újra megvalósítjuk egy React alkalmazásban. Kezdő alkalmazásunk létrehozásával kezdjük:
npx create-react-app react-app
Ezután importáljuk a Sentry csomagot:
yarn add @sentry/browser
és inicializálja:
react-app/src/index.js
...
import * as Sentry from '@sentry/browser';
const RELEASE = '0.1.0';
if (process.env.NODE_ENV === 'production') {
Sentry.init({
dsn: 'https://[email protected]/1289887',
release: RELEASE,
});
}
...
Észrevételek:
A fejlesztés során más mechanizmusokkal is rendelkezünk a problémák megfigyelésére, például a konzolra, így csak a Sentry-t engedélyezzük az éles verziókhoz.
Ezután implementáljuk a Hello és Error gombokat, és hozzáadjuk őket az alkalmazáshoz:
react-app/src/Hello.js
import React, { Component } from 'react';
import * as Sentry from '@sentry/browser';
export default class Hello extends Component {
state = {
text: '',
};
render() {
const { text } = this.state;
return (
<div>
<button
onClick={this.handleClick}
>
Hello
</button>
<div>{text}</div>
</div>
)
}
handleClick = () => {
this.setState({
text: 'Hello World',
});
try {
throw new Error('Caught');
} catch (err) {
if (process.env.NODE_ENV !== 'production') {
return;
}
Sentry.captureException(err);
}
}
}
A Sentry-t éles verzióval tesztelhetjük, ha beírjuk:
yarn build
és a build mappából írja be:
npx http-server -c-1
A probléma, amibe azonnal beleütközünk, hogy a Sentry hibarekordjai a minimált köteg sorszámaira vonatkoznak; nem túl hasznos.
A Sentry szolgáltatás ezt úgy magyarázza, hogy hiba érkezésekor lehívja a csökkentett csomag forrásleképezéseit. Ebben az esetben a localhostról futunk (a Sentry szolgáltatás nem éri el).
Megoldások (Forrástérképek)
A probléma megoldása az alkalmazás futtatása nyilvános webszerverről. Egy egyszerű válasz gomb a GitHub Pages szolgáltatás használatához (ingyenes). A használat lépései általában a következők:
Másolja ki a mappa tartalmát épít mappába docs az adattár gyökérkönyvtárában.
Bekapcsol GitHub oldalak a lerakatban (a GitHubból) a docs mappa használatához mester ágak
Nyomja meg a módosításokat a GitHubhoz
Megjegyzés: miután rájöttem, mit kell használnom létrehozás-alkalmazás létrehozása kezdőlap funkciót az alkalmazás elindításához. A következőt kellett hozzáadni a package.json fájlhoz:
Ez a hibajelentés nem is lehetne világosabb, BRAVO.
Az el nem számolt hibák illusztrációja
Ugyanígy menjünk végig a gombkattintáson hiba.
Ilyen hibával:
Az el nem számolt hibák jobb kezelése (megjelenítés)
A hibahatárok bevezetése
A felhasználói felület egy részének JavaScript-hibája nem tönkreteheti a teljes alkalmazást. A React-felhasználók problémájának megoldására a React 16 új koncepciót vezet be, az úgynevezett „hibahatárokat”.
A hibahatárok olyan React-összetevők, amelyek elkapják a JavaScript-hibákat bárhol az utódkomponens-fájukban, naplózzák ezeket a hibákat, és egy tartalék felhasználói felületet jelenítenek meg az összeomlott összetevőfa helyett. A hibahatárok elkapják a hibákat a renderelés során, az életciklus-metódusokban és az alattuk lévő teljes fa konstruktoraiban.
...
Új viselkedés az észleletlen hibákhoz
Ez a változás jelentős. A React 16-tól kezdve azok a hibák, amelyeket egyetlen hibahatár sem fogott el, a teljes React összetevőfa leválasztását eredményezi.
Egy fontos tisztázás, ami eltartott egy ideig, mire rájöttem erre a fenti viselkedés csak a renderelési metódusban (vagy nagyobb valószínűséggel bármelyik életciklus-módszerben) fellépő hibák esetén működik.. Például a hibahatárok használata nem tesz jót a gombunknak hiba; ez a hiba a kattintáskezelőben volt.
Hozzunk létre egy példa megjelenítési hibát, majd használjunk hibahatárokat a hiba kecsesebb kezeléséhez.