Ми можемо протестувати Sentry з виробничим складанням, ввівши:
yarn build
та з build папки введіть:
npx http-server -c-1
Проблема, з якою ми негайно зіткнемося, полягає в тому, що записи про помилку Sentry посилаються на номери рядків у зменшеному пакеті; не дуже корисно.
Служба Sentry пояснює це, витягуючи вихідні картки для зменшеного пакета після отримання помилки. У цьому випадку ми біжимо від localhost (недоступного службою Sentry).
Рішення (Вихідні Карти)
Вирішення цієї проблеми зводиться до запуску програми з загальнодоступного веб-сервера. Одна проста кнопка відповіді, щоб використовувати сервіс GitHub Pages (безкоштовно). Кроки для використання зазвичай такі:
Скопіюйте вміст папки будувати у папку Документи у кореневому каталозі репозиторію.
Увімкніть Сторінки GitHub в репозиторії (з GitHub), щоб використовувати папку docs майстер гілки
Перенесіть зміни на GitHub
Примітка: після того, як я зрозумів, що мені потрібно використовувати create-create-app функція домашньої сторінки для запуску програми. Зводилося до додавання наступного до package.json:
Цей звіт про помилку не може бути більш зрозумілим, BRAVO.
Ілюстрація неврахованих помилок
Аналогічно, давайте пройдемо через натискання кнопки помилка.
З помилкою, що з'являється так:
Краща обробка неврахованих помилок (рендерінг)
Введення Кордонів Помилок
Помилка JavaScript в частині інтерфейсу користувача не повинна порушувати роботу всієї програми. Щоб вирішити цю проблему для користувачів React, React 16 вводить нове поняття межі помилок.
Межі помилок – це компоненти React, які ловлять помилки JavaScript в будь-якому місці свого дочірнього дерева компонентів, реєструють ці помилки і відображають резервний інтерфейс користувача замість дерева компонентів, яке розбилося. Кордони помилок вловлюють помилки під час рендерингу, у методах життєвого циклу та у конструкторах всього дерева під ними.
...
Нова поведінка для невиявлених помилок
Ця зміна має важливе значення. Починаючи з React 16, помилки, які не були зловлені будь-яким кордоном помилок, призведуть до розмонтування всього дерева компонентів React.
Важливе уточнення, яке зайняло в мене деякий час, перш ніж я це зрозумів, полягає в тому, що вищезгадана поведінка працює тільки з помилками, що генеруються у методі рендерингу (або, що більш ймовірно, у будь-якому з методів життєвого циклу). Наприклад, використання меж помилок не принесло б жодної користі з нашою кнопкою помилка; ця помилка була в обробнику клацання.
Давайте створимо приклад помилки візуалізації, а потім використовуємо межі помилок для більш витонченої обробки помилки.
При натисканні кнопки Реагувати буде відображатися flag.busted.bogus, яка породжує помилку
Без межі помилки все дерево компонентів буде розмонтоване
Потім ми пишемо наш код межі помилки (використовує новий метод життєвого циклу componentDidCatch); це, по суті, приклад, наведений у статті Дена Абрамова:
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;
}
}