ProHoster > Blog > Ma'muriyat > Sentry React frontend ilovalaridagi xatolarni masofadan nazorat qilish
Sentry React frontend ilovalaridagi xatolarni masofadan nazorat qilish
Biz Sentry-dan React bilan foydalanishni o'rganmoqdamiz.
Ushbu maqola misol yordamida Sentry xatolari haqida xabar berish bilan boshlangan seriyaning bir qismidir: 1 qismi.
Reactni amalga oshirish
Avval ushbu dastur uchun yangi Sentry loyihasini qo'shishimiz kerak; Sentry veb-saytidan. Bunday holda biz React-ni tanlaymiz.
Biz ikkita tugmachani, Salom va Xatoni React bilan ilovada qayta ishga tushiramiz. Biz boshlang'ich dasturimizni yaratishdan boshlaymiz:
npx create-react-app react-app
Keyin biz Sentry paketini import qilamiz:
yarn add @sentry/browser
va uni ishga tushiring:
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,
});
}
...
Kuzatishlar:
Rivojlanish jarayonida bizda konsol kabi muammolarni nazorat qilish uchun boshqa mexanizmlar mavjud, shuning uchun biz faqat ishlab chiqarish uchun Sentry-ni yoqamiz.
Keyin biz "Salom" va "Xato" tugmachalarini qo'llaymiz va ularni ilovaga qo'shamiz:
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);
}
}
}
Biz Sentryni ishlab chiqarish qurilishi bilan sinab ko'rishimiz mumkin:
yarn build
va qurilish papkasidan quyidagilarni kiriting:
npx http-server -c-1
Biz darhol duch keladigan muammo shundaki, Sentryning xato yozuvlari kichiklashtirilgan partiyadagi qator raqamlariga ishora qiladi; unchalik foydali emas.
Sentry xizmati buni xato qabul qilingandan keyin qisqartirilgan paket uchun manba xaritalarini tortib olish orqali tushuntiradi. Bunday holda biz localhost-dan ishlayapmiz (Sentry xizmatidan foydalana olmaydi).
Yechimlar (manba xaritalari)
Ushbu muammoni hal qilish dasturni umumiy veb-serverdan ishga tushirishdir. GitHub Pages xizmatidan foydalanish uchun bitta oddiy javob tugmasi (bepul). Foydalanish bosqichlari odatda quyidagicha:
Jildning mazmunidan nusxa oling qurish jildga docs omborning asosiy katalogida.
Yoqing GitHub sahifalari docs jildidan foydalanish uchun omborda (GitHub'dan). usta filiallari
O'zgarishlarni GitHub-ga suring
nota: nimadan foydalanishim kerakligini tushunganimdan keyin ilova yaratish-yaratish ilovani ishga tushirish uchun bosh sahifa funksiyasi. Quyidagilarni package.json ga qo'shish uchun keldim:
Xuddi shunday, keling, tugmani bosish orqali o'tamiz xato.
Quyidagi kabi xato paydo bo'lishi bilan:
Hisobga olinmagan xatolarni yaxshiroq boshqarish (renderlash)
Xato chegaralarini joriy etish
Foydalanuvchi interfeysining bir qismidagi JavaScript xatosi butun dasturni buzmasligi kerak. React foydalanuvchilari uchun ushbu muammoni hal qilish uchun React 16 "xato chegaralari" deb nomlangan yangi tushunchani taqdim etadi.
Xato chegaralari - bu React komponentlari boʻlib, ular oʻzlarining kichik komponentlar daraxtining istalgan joyida JavaScript xatolarini ushlaydi, bu xatolarni qayd qiladi va buzilgan komponentlar daraxti oʻrniga zaxira foydalanuvchi interfeysini yaratadi. Xato chegaralari renderlash jarayonida, hayot aylanish usullarida va ularning ostidagi butun daraxt konstruktorlarida xatolarni aniqlaydi.
...
Aniqlanmagan xatolar uchun yangi xatti-harakatlar
Bu o'zgarish muhim ahamiyatga ega. React 16 dan boshlab, hech qanday xato chegarasi bilan ushlanmagan xatolar butun React komponentlar daraxtining uzilishiga olib keladi.
Buni tushunishimdan oldin menga bir muncha vaqt kerak bo'lgan muhim tushuntirish - bu yuqoridagi xatti-harakatlar faqat render usulida (yoki hayot aylanish usullaridan birida ko'proq) qilingan xatolar bilan ishlaydi.. Misol uchun, xato chegaralaridan foydalanish bizning tugma bilan hech qanday foyda keltirmaydi xato; bu xato bosish ishlov beruvchisida edi.
Keling, xatoni ko'rsatish misolini yaratamiz va keyin xatoni yanada oqilona hal qilish uchun xato chegaralaridan foydalanamiz.
Tugmani bosganingizda, munosabat ko‘rsatiladi bayroq.busted.bogus, bu xatolikni keltirib chiqaradi
Xato chegarasi bo'lmasa, butun komponent daraxti o'chiriladi
Keyin biz xato chegara kodini yozamiz (yangi hayot aylanish usulidan foydalanadi komponentDidCatch); Bu asosan Dan Abramovning maqolasida keltirilgan misol:
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;
}
}