Kami boleh menguji Sentry dengan binaan pengeluaran dengan memasukkan:
yarn build
dan dari folder binaan masukkan:
npx http-server -c-1
Masalah yang kami hadapi dengan segera ialah rekod ralat Sentry merujuk kepada nombor baris dalam kelompok kecil; tidak berguna sangat.
Perkhidmatan Sentry menerangkan perkara ini dengan menarik peta sumber untuk paket yang dikurangkan selepas menerima ralat. Dalam kes ini, kami menjalankan dari localhost (tidak boleh diakses oleh perkhidmatan Sentry).
Penyelesaian (Peta Sumber)
Penyelesaian kepada masalah ini adalah dengan menjalankan aplikasi dari pelayan web awam. Satu butang balas ringkas untuk menggunakan perkhidmatan GitHub Pages (percuma). Langkah-langkah untuk digunakan biasanya seperti berikut:
Salin kandungan folder membina ke folder docs dalam direktori akar repositori.
Hidupkan Halaman GitHub dalam repositori (dari GitHub) untuk menggunakan folder dokumen masuk master cawangan
Tolak perubahan ke GitHub
Nota: selepas saya tahu apa yang perlu saya gunakan buat-buat-apl fungsi halaman utama untuk melancarkan aplikasi. Turun untuk menambah yang berikut pada package.json:
Laporan pepijat ini tidak boleh menjadi lebih jelas, BRAVO.
Ilustrasi Ralat Tidak Dikira
Begitu juga, mari kita pergi melalui klik butang ralat.
Dengan ralat muncul seperti ini:
Pengendalian ralat tidak terkira yang lebih baik (rendering)
Pengenalan Had Ralat
Ralat JavaScript pada sebahagian daripada antara muka pengguna tidak seharusnya memecahkan keseluruhan aplikasi. Untuk menyelesaikan masalah ini bagi pengguna React, React 16 memperkenalkan konsep baharu yang dipanggil "batas ralat".
Sempadan ralat ialah komponen React yang menangkap ralat JavaScript di mana-mana dalam pepohon komponen anak mereka, log ralat tersebut dan menyebabkan UI sandaran dan bukannya pepohon komponen yang ranap. Sempadan ralat menangkap ralat semasa pemaparan, dalam kaedah kitaran hayat dan dalam pembina keseluruhan pokok di bawahnya.
...
Tingkah laku baharu untuk ralat yang tidak dapat dikesan
Perubahan ini amat ketara. Mulai React 16, ralat yang tidak ditangkap oleh sebarang sempadan ralat akan menyebabkan keseluruhan pepohon komponen React dinyahlekap.
Penjelasan penting yang mengambil sedikit masa sebelum saya menyedari ini ialah itu tingkah laku di atas hanya berfungsi dengan ralat yang dilemparkan dalam kaedah pemaparan (atau lebih berkemungkinan dalam mana-mana kaedah kitaran hayat). Sebagai contoh, menggunakan sempadan ralat tidak akan mendatangkan faedah dengan butang kami ralat; ralat ini terdapat dalam pengendali klik.
Mari buat contoh ralat pemaparan dan kemudian gunakan sempadan ralat untuk mengendalikan ralat dengan lebih anggun.
Apabila anda menekan butang, Bertindak akan dipaparkan bendera.dipatahkan.palsu, yang menghasilkan ralat
Tanpa sempadan ralat, keseluruhan pokok komponen akan dinyahlekapkan
Kemudian kami menulis kod sempadan ralat kami (menggunakan kaedah kitaran hayat baharu componentDidCatch); ini pada dasarnya adalah contoh yang diberikan dalam artikel 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;
}
}