Error Handling
error.js
ファイル規約によって、入れ子になったルートの実行時エラーを優雅に処理できます。
- ルート Segment とそのネストした子ルートを React Error Boundary で自動的にラップします。
- ファイルシステム階層を使用して粒度を調整し、特定の Segment に合わせたエラー UI を作成します。
- アプリの残りの機能を維持したまま、影響を受ける Segment にエラーを隔離する。
- ページ全体をリロードすることなくエラーからの回復を試みる機能を追加する。
ルート Segment 内に error.js
ファイルを追加し、React コンポーネントをエクスポートすることで、エラー UI を作成します。
app/dashboard/error.tsx
'use client' // Error components must be Client Components
import { useEffect } from 'react'
export default function Error({
error,
reset,
}: {
error: Error
reset: () => void
}) {
useEffect(() => {
// Log the error to an error reporting service
console.error(error)
}, [error])
return (
<div>
<h2>Something went wrong!</h2>
<button
onClick={
// Attempt to recover by trying to re-render the segment
() => reset()
}
>
Try again
</button>
</div>
)
}
error.js
の仕組み
error.js
は自動的に React Error Boundary を作成し、ネストした子 Segment またはpage.js
コンポーネントを ラッピング します。error.js
ファイルからエクスポートされた React コンポーネントは、fallbackコンポーネントとして使用されます。- エラー境界内でエラーがスローされた場合、エラーは コンテインメント され、フォールバックコンポーネントは レンダリング されます。
- フォールバックエラーコンポーネントがアクティブな場合、エラー境界より上のレイアウトはその状態を維持し、インタラクティブな状態を維持し、エラーコンポーネントはエラーから回復するための機能を表示できます。
エラーからの回復
エラーの原因は一時的な場合もあります。このような場合、再試行するだけで問題が解決することもあります。
エラーコンポーネントは reset()
関数を使用して、エラーからの回復を試みるようユーザーに促すことができます。実行されると、この関数はエラー境界の内容の再描画を試みます。成功した場合、フォールバックエラーコンポーネントは再レンダリングの結果で置き換えられます。
app/dashboard/error.tsx
'use client'
export default function Error({
error,
reset,
}: {
error: Error
reset: () => void
}) {
return (
<div>
<h2>Something went wrong!</h2>
<button onClick={() => reset()}>Try again</button>
</div>
)
}
ネス トされたルート
特別なファイルを使って作成された React コンポーネントは、特定の入れ子階層でレンダリングされます。
例えば、layout.js
ファイルとerror.js
ファイルを含む 2 つの Segment を持つネストされたルートは、次のようなsimplifiedコンポーネント階層でレンダリングされます:
ネストされたコンポーネント階層は、ネストされたルート全体の error.js
ファイルの動作に影響を与えます:
- エラーはもっとも近い親のエラー境界にバブルアップします。つまり、
error.js
ファイルはネストしたすべての子 Segment のエラーを処理します。ルートのネストされたフォルダ内の異なるレベルにerror.js
ファイルを配置することで、より細かいエラー UI を実現できます。 - エラー境界はそのレイアウトコンポーネントの 内部 にネストされているので、
error.js
境界は 同じ Segment のlayout.js
コンポーネントで発生したエラーを処理しません。