Hướng dẫn theo framework
Theo dõi lỗi cho app React
@belvador/react báo lỗi render kèm component stack, lỗi root của React 19 và mọi lỗi chưa xử lý trên trình duyệt. Gói này bọc engine JavaScript của Sentry 10.76.2, lọc dữ liệu nhạy cảm trước khi gửi, và event được lưu trên node của chính bạn.
Trả lời nhanh#
Cài
@belvador/react, gọiinitvới DSN của bạn và bọc app trongErrorBoundary.Gói báo lỗi render kèm component stack, lỗi root của React 19 và lỗi chưa xử lý trên trình duyệt.
Event được lọc dữ liệu nhạy cảm trên trình duyệt và lọc lần nữa trên node trong project Hetzner của bạn.
Nếu đang dùng
@sentry/react, bạn đổi dòng import và DSN.
Bắt được những gì#
Lỗi render qua
ErrorBoundary, kèm component stack, trong khi fallback của bạn thay cho trang trắng.Lỗi root của React 19 —
onUncaughtError,onCaughtErrorvàonRecoverableErrorquareactErrorHandler(). React 19 tự xử lý nhiều lỗi, nên thiếu các hook này thì lỗi không bao giờ tớiwindow.onerror.Lỗi và promise rejection chưa xử lý sau khi
initchạy.Stack trace trỏ về mã nguồn khi bạn upload source map từ CI (source map).
Mặc định không gửi: breadcrumb, tệp đính kèm và trace header phải bật thủ công, và không có replay hay tracing trên trình duyệt (khả năng hỗ trợ).
Cài đặt#
npm install @belvador/react@0.6.1Khởi tạo (React 18 và 19)#
import { init } from "@belvador/react";init({ dsn: "https://<public-key>@ingest.belvador.dev/<project-id>", release: import.meta.env.VITE_APP_VERSION, // your build or commit id environment: import.meta.env.MODE,});Import file đó ở dòng đầu tiên của src/main.tsx, trước App, để một module lỗi lúc đang nạp vẫn được báo:
import "./instrument"; // first line: starts Belvador before App's modules loadimport { createRoot } from "react-dom/client";import { ErrorBoundary } from "@belvador/react";import App from "./App";const root = document.getElementById("root");if (!root) throw new Error("Root element missing");createRoot(root).render( <ErrorBoundary fallback={<p>Something went wrong.</p>}> <App /> </ErrorBoundary>,);Với React 19, truyền thêm reactErrorHandler() vào tuỳ chọn của root; hướng dẫn React có cả hai phiên bản và dòng Content Security Policy cần thêm.
Kiểm tra đã chạy#
Gọi verifyIntegration() một lần từ production, hoặc ném một lỗi thử có gắn tag, và tab Kết nối của project hiện Đã xác minh cho trình duyệt (kiểm kết nối).
Giới hạn#
Chỉ trình duyệt. Server render trên Workers thì dùng TanStack Start; server Node.js thì dùng Node.js.
Next.js chưa có gói Belvador đã kiểm thử.
Không có session replay và hộp thoại phản hồi người dùng: hộp thoại đó tải script từ host của DSN, điều mà Belvador không bao giờ làm.
Câu hỏi thường gặp#
Tôi đang dùng @sentry/react. Cần đổi gì?#
Đổi import sang @belvador/react và DSN sang DSN Belvador. captureException, withScope, setTag và ErrorBoundary giữ nguyên tên (chuyển từ Sentry).
Gói nặng bao nhiêu?#
Trong bản build phát hành 0.4.0, @belvador/react với init và ErrorBoundary đo được 37,6 KB gzip; @sentry/browser với init mặc định đo được 28,7 KB trong cùng bản build. Tham chiếu SDK liệt kê các gói hiện tại.
Bài viết về chủ đề này
Tất cả bài viết- Error boundary của React và lỗi async: thí nghiệm bắt được gìError boundary của React 19 bắt lỗi nào, lỗi nào tới onCaughtError, onUncaughtError hay window, và vì sao startTransition độc lập lại cư xử khác.
- Cursor và lỗi production: Debug Mode so với lỗi người dùng gặpDebug lỗi production bằng Cursor: khi nào Debug Mode giúp được, vì sao source map sửa vị trí mà không sửa message, và một rule bắt đầu từ stack.
- Unhandled promise rejection và lỗi đã bắt: công cụ theo dõi lỗi nhận được gì14 kiểu lỗi trình duyệt chạy qua công cụ theo dõi lỗi: cái nào đến nơi, cái nào biến mất khi bắt rồi log, và vì sao reject bằng chuỗi làm mất stack.
- Source map trên production với Vite: mỗi cấu hình thực sự đưa gì vào bản buildSo sánh sourcemap false, true và hidden của Vite trên một bản build: file nào được tạo, stack frame hiện gì, và cách có stack dễ đọc mà không lộ map.
Thử trên project Hetzner của bạn
Miễn phí trong giai đoạn beta. Hetzner tính tiền máy; Belvador không bao giờ tính tiền theo event.