unstable_rethrow
この機能は現在不安定であり、変更される可能性があります。本番環境での使用は推奨されません。ぜひ試してみて、GitHubでフィードバックをお寄せください。
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自体によって再スローおよび処理されるべきです。
ルートセグメントが静的でない限りエラーをスローするようにマークされている場合、Dynamic API呼び出しも同様に開発者によってキャッチされるべきではないエラーをスローします。部分的なプリレンダリング (PPR) もこの動作に影響することに注意してください。これらのAPIは次のとおりです。
cookies
headers
searchParams
fetch(..., { cache: 'no-store' })
fetch(..., { next: { revalidate: 0 } })
知っておくと良いこと:
- このメソッドは、catchブロックの先頭で、エラーオブジェクトを唯一の引数として渡して呼び出す必要があります。また、Promiseの`.catch`ハンドラー内でも使用できます。
- エラーをスローするAPIへの呼び出しがtry/catchでラップされていないことを確認すれば、`unstable_rethrow`を使用する必要はありません。
- リソースのクリーンアップ(インターバルやタイマーのクリアなど)は、`unstable_rethrow`の呼び出し前に行うか、`finally`ブロック内で行う必要があります。
お役に立ちましたか?