Біз бірден тап болатын мәселе, Sentry қате жазбалары кішірейтілген топтамадағы жол нөмірлеріне сілтеме жасайды; өте пайдалы емес.
Sentry қызметі мұны қате алғаннан кейін азайтылған пакет үшін бастапқы карталарды тарту арқылы түсіндіреді. Бұл жағдайда біз localhost арқылы іске қосыламыз (Sentry қызметі қол жеткізе алмайды).
Шешімдер (бастапқы карталар)
Бұл мәселенің шешімі қолданбаны жалпыға қолжетімді веб-серверден іске қосу болып табылады. GitHub Pages қызметін пайдалану үшін бір қарапайым жауап түймесі (тегін). Қолдану қадамдары әдетте келесідей:
Қалтаның мазмұнын көшіріңіз салу қалтаға Docs репозиторийдің түбірлік каталогында.
Қосыңыз GitHub беттері құжаттар қалтасын пайдалану үшін репозиторийде (GitHub-тан). мастер филиалдар
Өзгерістерді GitHub жүйесіне басыңыз
ескерту: Мен нені пайдалану керектігін түсінгеннен кейін қолданбаны жасау-жасау қолданбаны іске қосу үшін басты бет функциясы. Package.json файлына келесіні қосуға келдім:
Бұл қате туралы есеп анық болуы мүмкін емес, БРАВО.
Есепке алынбаған қателердің иллюстрациясы
Сол сияқты, түймені басу арқылы өтейік қателік.
Мынадай қате пайда болғанда:
Есептелмеген қателерді жақсырақ өңдеу (көрсету)
Қателік шектеулерді енгізу
Пайдаланушы интерфейсінің бір бөлігіндегі JavaScript қатесі бүкіл қолданбаны бұзбауы керек. React пайдаланушылары үшін бұл мәселені шешу үшін React 16 «қате шекаралары» деп аталатын жаңа тұжырымдаманы ұсынады.
Қате шекаралары - JavaScript қателерін еншілес құрамдас тармағының кез келген жерінен ұстайтын, сол қателерді тіркейтін және бұзылған құрамдас ағашының орнына қалпына келтіру интерфейсін көрсететін React құрамдастары. Қате шекаралары көрсету кезінде, өмірлік цикл әдістерінде және олардың астындағы бүкіл ағаштың конструкторларында қателерді ұстайды.
...
Анықталмаған қателер үшін жаңа әрекет
Бұл өзгеріс маңызды. React 16-дан бастап қате шекарасы анықталмаған қателер бүкіл React құрамдас ағашының ажыратылуына әкеледі.
Мен мұны түсінгенге дейін біраз уақыт алған маңызды түсініктеме болды жоғарыда аталған әрекет тек көрсету әдісінде жіберілген қателермен жұмыс істейді (немесе өмірлік цикл әдістерінің кез келгенінде көбірек болуы мүмкін). Мысалы, қате шекараларын пайдалану біздің түймемен ешқандай жақсылық жасамайды қателік; бұл қате басу өңдегішінде болды.
Көрсету қатесінің мысалын жасап, қатені жақсырақ өңдеу үшін қате шекараларын қолданайық.
Түймені басқан кезде, жауап көрсетіледі жалау.бұзылған.жалған, бұл қатені тудырады
Қате шекарасы болмаса, бүкіл құрамдас ағашы ажыратылады
Содан кейін біз қате шекара кодын жазамыз (жаңа өмірлік цикл әдісін пайдаланады komponentDidCatch); Бұл негізінен Дан Абрамовтың мақаласында келтірілген мысал:
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;
}
}