
TĂ€na rÀÀgin teile vigade jĂ€lgimisest reaalajas React rakenduses. VĂ€line kasutajaliidese rakendus ei ole tavaliselt vigade jĂ€lgimiseks mĂ”eldud. MĂ”ned ettevĂ”tted lĂŒkkavad sageli vigade jĂ€lgimise edasi, naastes sellele alles pĂ€rast dokumentatsiooni, testimist ja muud. Siiski, kui saate oma toodet paremaks muuta, siis tehke seda lihtsalt!
1. Miks vajate Sentry-d?
Eeldan, et olete huvitatud vigade jÀlgimisest tootmisprotsessis.
Kas arvestate, et seda on liiga vÀhe?
HĂ€sti, vaatame detaile.
Peamised pÔhjused, miks arendajad peaksid Sentry-d kasutama:
- VĂ€hendab riske vigase koodi juurutamisel.
- Aitab QA-l koodi testida.
- Kiire probleemide teavitamine.
- VÔime vigade kiireks parandamiseks.
- Mugav vigade kuvamine administraatori paneelis.
- Vigade sorteerimine kasutaja/brauseri segmentide jÀrgi.
Peamised pÔhjused CEO-le/projekti juhile.
- Raha kokkuhoid (Sentry saab paigaldada teie serveritesse).
- Kasutajate tagasiside saamine.
- MÔistmine, mis teie projektiga reaalajas valesti on.
- MÔistmine, kui palju probleeme inimestel teie rakendusega on.
- Aitab leida kohti, kus teie arendajad on eksinud.
Arvan, et arendajad oleksid sellest artiklist eelkÔige huvitatud. Samuti vÔite seda pÔhjuste loetelu kasutada, et veenda juhtkonda Sentry integreerima.
Olge Àritegevuse jaoks viimase punkti osas ettevaatlik.
Kas olete juba huvitatud?

Mis on Sentry?
Sentry on avatud lĂ€htekoodiga vigade jĂ€lgimise rakendus, mis aitab arendajatel realajas tĂ”rkeid jĂ€lgida ja parandada. Ărge unustage, et rakendus aitab tĂ”husust suurendada ja kasutajakogemust parandada. Sentry toetab JavaScripti, Node'i, Pythoni, PHP-d, Ruby't, Java't ja teisi programmeerimiskeeli.

2. Logige sisse ja looge projekt.
- Avage oma Sentry konto. VÔib-olla peate sisse logima. (MÀrgin, et Sentry saab paigaldada teie serveritesse.)
- JĂ€rgmiseks sammuks on projekti loomine.
- Valige oma keel loendist. (Kavatseme valida Reacti. KlÔpsake "Loo projekt".)

Konfigureerige oma rakendus. Alustuseks nÀete, kuidas Sentryt konteinersse integreerida:
import * as Sentry from '@sentry/browser';
// Sentry.init({
// dsn: "<https:>"
// });
// oleks olnud kutsutud enne, kui seda siin kasutatakse
// ideaalis enne isegi teie react rakenduse renderdamist
class ExampleBoundary extends Component {
constructor(props) {
super(props);
this.state = { error: null };
}
componentDidCatch(error, errorInfo) {
this.setState({ error });
Sentry.withScope(scope => {
Object.keys(errorInfo).forEach(key => {
scope.setExtra(key, errorInfo[key]);
});
Sentry.captureException(error);
});
}
render() {
if (this.state.error) {
//render fallback UI
return (
<a onclick="{()" > Sentry.showReportDialog()}>Esitama tagasisidet</a>
);
} else {
//kui viga ei esine, renderdage lapsed muutumatuna
return this.props.children;
}
}
}Sentry-l on kasulik nÔustaja, mis aitab teil mÔista, mida edasi teha. Saate jÀrgida jÀrgmisi samme. Soovin nÀidata, kuidas luua oma esimene veakÀsitleja. SuurepÀrane, projekt on loodud! Liigutame jÀrgmisse etappi.
3. Reacti ja Sentry integreerimine
Peate installima npm paketi oma projekti.
npm i @sentry/browserInitsialiseerige Sentry oma konteineris:
Sentry.init({
// dsn: #dsnUrl,
});DSN leiate aadressilt Projects -> Settings -> Client Keys. Klientide vÔtmed on otsingureas.

componentDidCatch(error, errorInfo) {
Sentry.withScope(scope => {
Object.keys(errorInfo).forEach(key => {
scope.setExtra(key, errorInfo[key]);
});
Sentry.captureException(error);
});
}4. Esimese vea jÀlgimine
NĂ€iteks kasutasin lihtsat muusikarakendust API Deezeriga. Saate seda nĂ€ha. . Peame tekitama vea. Ăks viis seda teha on pöörduda "undefined" omaduse poole.
Peame looma nupu, mis kutsub esile console.log jot user.email. PÀrast seda toimingut peaksime saama veateate: Uncaught TypeError (ei suuda lugeda omadust undefined email) puuduvate objekti kasutaja tÔttu. Samuti saate kasutada Javascripti erandit.
Kogu konteiner nÀeb vÀlja selline:
import React, { Component } from "react";
import { connect } from "react-redux";
import { Input, List, Skeleton, Avatar } from "antd";
import * as Sentry from "@sentry/browser";
import getList from "..\/store\/actions\/getList";
const Search = Input.Search;
const mapState = state => ({
list: state.root.list,
loading: state.root.loading
});
const mapDispatch = {
getList
};
class Container extends Component {
constructor(props) {
super(props);
Sentry.init({
dsn: "https:\/\/fc0edcf6927a4397855797a033f04085@sentry.io\/1417586",
});
}
componentDidCatch(error, errorInfo) {
Sentry.withScope(scope => {
Object.keys(errorInfo).forEach(key => {
scope.setExtra(key, errorInfo[key]);
});
Sentry.captureException(error);
});
}
render() {
const { list, loading, getList } = this.props;
const user = undefined;
return (
<div classname="App">
<button
type="button"
onclick="{()" > console.log(user.email)}
>
test error1
</button>
<div onclick="{()" > Sentry.showReportDialog()}>Teata tagasiside1</div>
<h1>Muusika Otsija</h1>
<br />
<search onsearch="{value" > getList(value)} enterButton \/>
{loading && <skeleton avatar title="{false}" loading="{true}" active />}
{!loading && (
<list
itemlayout="horizontal"
datasource="{list}"
locale="{{" emptytext: <div /> }}
renderItem={item => (
<List.Item>
<List.Item.Meta
avatar={<avatar src="{item.artist.picture}" />}
title={item.title}
description={item.artist.name}
\/>
</List.Item>
)}
/>
)}
</div>
);
}
}
export default connect(
mapState,
mapDispatch
)(Container);PĂ€rast selle nupu integreerimist peate seda testima brauseris.

Meil on esimene viga

Whoo-hoo!

Kui klÔpsate veatiitel, nÀete kallutust.

SÔnumid nÀevad halvad vÀlja. Loomulikult oleme nÀinud veateateid, mÔistmata, kust see kood pÀrineb. Vaikimisi tegemist on ReactJS allika kaardiga, sest need ei ole seadistatud.
Soovin samuti pakkuda juhiseid allika kaardi seadistamiseks, kuid see pikendaks seda artiklit oluliselt.
Saate seda teemat edasi uurida . Kui see artikkel teid huvitab, avab teise osa allika kaardi integreerimisest. Nii et vajutage rohkem meeldimisnuppe ja registreeruge , et mitte jÀÀda ilma teisest osast.
5. Kasutamine Sentry lÔpp-punktiga API
Olgu. Oleme varasemates punktides arutanud javascripti erandi. Kuid mida me teeme XHR vigadega?
Sentryl on samuti kohandatud vigade töötlemine. Olen seda kasutanud API vigade jÀlgimiseks.
Sentry.captureException(err)Saate kohandada vea nime, taset, lisada andmeid, ainulaadseid kasutajateavet oma rakenduse, e-posti jne kaudu.
superagent
.get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
.set("X-RapidAPI-Key", #id_key)
.end((err, response) => {
if (err) {
Sentry.configureScope(
scope => scope
.setUser({"email": "john.doe@example.com"})
.setLevel("Error")
);
return Sentry.captureException(err);
}
if (response) {
return dispatch(setList(response.body.data));
}
});Sooviksin kasutada API catch jaoks ĂŒhiseid funktsioone.
import * as Sentry from "@sentry/browser";
export const apiCatch = (error, getState) => {
const store = getState();
const storeStringify = JSON.stringify(store);
const { root: { user: { email } } } = store;
Sentry.configureScope(
scope => scope
.setLevel("Error")
.setUser({ email })
.setExtra("store", storeStringify)
);
// Sentry.showReportDialog(); - Kui soovite kasutajate tagasisidet vea kohta
return Sentry.captureException(error);
};Impordige see funktsioon API kutsumisse.
export default query => (dispatch, getState) => {
superagent
.get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
.set("X-RapidAPI-Key", #id_key)
.end((error, response) => {
if (error) {
return apiCatch(error, getState)
}
if (response) {
return dispatch(setList(response.body.data));
}
});
};Kontrollime meetodeid:
- setLevel vÔimaldab sisestada taseme vea painutisse. Sellel on omadused - 'fatal', 'error', 'warning', 'log', 'info', 'debug', 'critical'.
- setUser aitab salvestada kÔik kasutajateave (id, e-posti aadress, makseplaan jne).
- setExtra vÔimaldab mÀÀrata mis tahes vajalikud andmed, nÀiteks poe.
Kui soovite saada kasutajate tagasisidet vea kohta, peaksite kasutama funktsiooni showReportDialog.
Sentry.showReportDialog();KokkuvÔte:
TĂ€nasel pĂ€eval kirjeldasime ĂŒht viisi Sentry integreerimiseks Reacti rakendusse.
â Telegrami vestlus
Allikas: habr.com
