エラー境界
ユーザーに空のページが表示されるのを避けるため、ルートモジュールはコード内のエラーを自動的にキャッチし、最も近い ErrorBoundary
をレンダリングします。
エラー境界は、エラー報告やフォーム検証エラーのレンダリングを目的としたものではありません。代わりに、フォーム検証 および エラー報告 を参照してください。
1. ルートエラー境界を追加する
すべてのアプリケーションは、少なくともルートエラー境界をエクスポートする必要があります。これは、次の3つの主なケースを処理します。
- ステータスコードとテキストを持つ
data
がスローされた場合 - スタックトレースを持つエラーのインスタンス
- ランダムにスローされた値
2. バグを書く
制御フローの手段として、エラー境界を強制的にレンダリングするために意図的にエラーをスローすることは推奨されません。エラー境界は、主にコード内の意図しないエラーをキャッチするためのものです。
これにより、ステップ1のUIの instanceof Error
ブランチがレンダリングされます。
これはローダーだけでなく、すべてのルートモジュールAPI(ローダー、アクション、コンポーネント、ヘッダー、リンク、メタ)にも当てはまります。
3. ローダー/アクションでデータをスローする
#2のルールには例外があり、特に404エラーの場合です。ローダーがページをレンダリングするために必要なものを見つけられない場合、最も近いエラー境界に意図的に throw data()
(適切なステータスコード付き) をスローできます。404をスローして次に進みます。
これにより、ステップ1のUIの isRouteErrorResponse
ブランチがレンダリングされます。
4. ネストされたエラー境界
エラーがスローされると、「最も近いエラー境界」がレンダリングされます。次のネストされたルートを考えてみましょう。
次の表は、エラーの発生元に基づいて、どのエラー境界がレンダリングされるかを示しています。
エラーの発生元 | レンダリングされる境界 |
---|---|
app.tsx | app.tsx |
invoices.tsx | app.tsx |
invoice-page.tsx | invoice-page.tsx |
payments.tsx | invoice-page.tsx |
エラーのサニタイズ
本番モードでは、サーバーで発生したエラーは、機密性の高いサーバー情報(スタックトレースなど)が漏洩するのを防ぐために、ブラウザに送信される前に自動的にサニタイズされます。
つまり、スローされた Error
は、本番環境のブラウザでは一般的なメッセージを持ち、スタックトレースは含まれません。元のエラーはサーバー上では変更されません。
また、throw data(yourData)
で送信されたデータは、そこに表示されることを意図しているため、サニタイズされないことに注意してください。