コンテンツへスキップ

unstable_rethrow

このAPIは現在不安定であり、変更される可能性があります。

unstable_rethrow は、アプリケーションコードで発生したエラーの処理を試行中に、Next.js がスローする内部エラーをキャッチしないようにするために使用できます。

たとえば、notFound 関数を呼び出すと、Next.js の内部エラーがスローされ、not-found.js コンポーネントがレンダリングされます。ただし、try/catch ブロック内で使用すると、エラーがキャッチされ、not-found.js のレンダリングが防止されます。

@/app/ui/component.tsx
import { notFound } from 'next/navigation'
 
export default async function Page() {
  try {
    const post = await fetch('https://.../posts/1').then((res) => {
      if (res.status === 404) notFound()
      if (!res.ok) throw new Error(res.statusText)
      return res.json()
    })
  } catch (err) {
    console.error(err)
  }
}

unstable_rethrow API を使用して内部エラーを再スローし、期待される動作を続行できます。

@/app/ui/component.tsx
import { notFound, unstable_rethrow } from 'next/navigation'
 
export default async function Page() {
  try {
    const post = await fetch('https://.../posts/1').then((res) => {
      if (res.status === 404) notFound()
      if (!res.ok) throw new Error(res.statusText)
      return res.json()
    })
  } catch (err) {
    unstable_rethrow(err)
    console.error(err)
  }
}

次の Next.js API は、エラーをスローすることに依存しており、Next.js 自体によって再スローおよび処理される必要があります。

ルートセグメントが静的でない限りエラーをスローするようにマークされている場合、動的API呼び出しもエラーをスローします。これは同様に開発者によってキャッチされるべきではありません。部分的なプリレンダリング(PPR)もこの動作に影響することに注意してください。これらのAPIは次のとおりです。

知っておくと良いこと:

  • このメソッドは、catch ブロックの先頭で、エラーオブジェクトを引数として呼び出す必要があります。Promise の .catch ハンドラー内でも使用できます。
  • エラーをスローするAPIへの呼び出しがtry/catchでラップされていないことを確認すれば、unstable_rethrow を使用する必要はありません。
  • リソースのクリーンアップ(間隔、タイマーなどのクリアなど)は、unstable_rethrow の呼び出しの前、または finally ブロック内で行う必要があります。