TL;DR

App Router の app ディレクトリに置く特別なファイルの 1 つ。page.tsx を包む Error Boundary コンポーネントのフォールバックとして表示される。

仕組み

Error Boundary コンポーネントは自動で挿入される。layout.tsx はその外側(親の階層)に位置するので、layout.tsx で発生した例外は、1 つ上の階層の error.tsx で捕捉される。

<Layout>
  <ErrorBoundary fallback={<Error />}>
    <Suspense>
      <Page />
    </Suspense>
  </ErrorBoundary>
</Layout>

例

他の特別なファイルと違い、Client Component として定義する必要がある。

"use client"
 
import { useEffect } from "react"
 
export default function Error({ error, reset }) {
  useEffect(() => console.error(error), [error])
 
  return (
    <div>
      <h2>Something went wrong!</h2>
      <button onClick={() => reset()}>Try again</button>
    </div>
  )
}

自分の理解

拡張子は .jsx(.js)でもよい。

関連

出典