unstable_rethrow
この機能は現在不安定であり、変更される可能性があります。本番環境での使用は推奨されません。お試しいただき、GitHubでフィードバックをお寄せください。
unstable_rethrow は、アプリケーションコードでスローされたエラーを処理しようとしている際に、Next.js によってスローされる内部エラーをキャッチしないようにするために使用できます。
例えば、notFound 関数を呼び出すと、内部的な Next.js エラーがスローされ、not-found.js コンポーネントがレンダリングされます。しかし、try/catch ステートメントの try ブロック内で使用された場合、エラーはキャッチされ、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 は、開発者自身がキャッチすべきではない、エラーをスローする仕組みに依存しています。
ルートセグメントが静的でない場合にエラーをスローするようにマークされている場合、Dynamic API 呼び出しも同様に開発者がキャッチすべきではないエラーをスローします。Partial Prerendering (PPR) もこの動作に影響することに注意してください。これらの API は以下の通りです。
cookiesheaderssearchParamsfetch(..., { cache: 'no-store' })fetch(..., { next: { revalidate: 0 } })
知っておくと良いこと:
- このメソッドは、catch ブロックの先頭で、エラーオブジェクトを唯一の引数として渡して呼び出す必要があります。Promise の
.catchハンドラー内でも使用できます。- API 呼び出しをカプセル化し、**呼び出し元**に例外を処理させることで、
unstable_rethrowの使用を回避できる場合があります。unstable_rethrowは、キャッチした例外にアプリケーションエラーとフレームワーク制御の例外(redirect()やnotFound()など)の両方が含まれる可能性がある場合にのみ使用してください。- リソースのクリーンアップ(インターバル、タイマーなどのクリアなど)は、
unstable_rethrowの呼び出し前に行うか、finallyブロック内で行う必要があります。
役に立ちましたか?