Fanaraha-maso lavitra ny bibikely ao amin'ny rindranasa React frontend
Mikaroka ny fampiasana Sentry miaraka amin'ny React izahay.
Ity lahatsoratra ity dia ampahany amin'ny andiany manomboka amin'ny tatitra ny hadisoan'ny Sentry amin'ny fampiasana ohatra: Ampahany amin'ny 1.
Fampiharana ny React
Voalohany dia mila manampy tetikasa Sentry vaovao ho an'ity fampiharana ity isika; avy amin'ny tranokala Sentry. Amin'ity tranga ity dia misafidy React isika.
Hampihatra indray ny bokotra roa, Hello sy Error, amin'ny fampiharana miaraka amin'ny React. Manomboka amin'ny famoronana ny fampiharana starter izahay:
npx create-react-app react-app
Avy eo dia manafatra ny fonosana Sentry izahay:
yarn add @sentry/browser
ary manomboka azy:
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,
});
}
...
Fandinihana:
Mandritra ny fampandrosoana dia manana mekanika hafa amin'ny fanaraha-maso ny olana izahay, toy ny console, ka ny Sentry ihany no ahafahantsika manamboatra ny famokarana.
Manaraka izany dia mampihatra ny bokotra Hello sy Error izahay ary ampio amin'ny fampiharana:
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);
}
}
}
Ny olana atrehintsika avy hatrany dia ny firaketana ny hadisoan'i Sentry dia manondro ny laharana andalana ao amin'ny andiany kely; tsy dia ilaina.
Ny serivisy Sentry dia manazava izany amin'ny alΓ lan'ny fisintonana ny sarintany loharano ho an'ny fonosana mihena rehefa avy nahazo fahadisoana. Amin'ity tranga ity dia mihazakazaka avy amin'ny localhost izahay (tsy azon'ny serivisy Sentry).
Vahaolana (Source Maps)
Ny vahaolana amin'ity olana ity dia ny fampandehanana ny fampiharana avy amin'ny mpizara tranonkalam-bahoaka. Boky valiny tsotra iray hampiasana ny serivisy GitHub Pages (maimaim-poana). Ny dingana ampiasaina dia matetika toy izao manaraka izao:
Adikao ny votoatin'ny lahatahiry manao fampirimana Docs ao amin'ny lahatahiry fototry ny tahiry.
Alefaso Pejy GitHub ao amin'ny tahiry (avy amin'ny GitHub) hampiasa ny lahatahiry docs in tompony sampany
Fanazavana manan-danja izay naharitra elaela vao tonga saina aho dia ny hoe ny fihetsika etsy ambony dia tsy miasa afa-tsy amin'ny lesoka natsipy tao amin'ny fomba famandrihana (na azo inoana kokoa amin'ny fomba fiasa rehetra). Ohatra, ny fampiasana sisintany diso dia tsy hahasoa ny bokotrantsika Error; ity hadisoana ity dia tao amin'ny mpandrindra kitihina.
Andeha isika hamorona ohatra iray amin'ny famandrihana fahadisoana ary avy eo dia ampiasao ny fetran'ny hadisoana mba hikarakarana ny fahadisoana amin'ny fomba tsara kokoa.
Raha tsy misy fetran'ny hadisoana, dia ho esorina ny hazo singa manontolo
Avy eo dia manoratra ny kaody sisin-tany diso izahay (mampiasa ny fomba fiasa vaovao componentDidCatch); Ity no ohatra omena ao amin'ny lahatsoratr'i 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;
}
}