unstable_after
unstable_after
は、レスポンス(またはプリレンダリング)の完了後に実行する作業をスケジュールすることを可能にします。これは、レスポンスをブロックしないロギングや分析などのタスクや他の副作用に便利です。
これはServer Components(generateMetadata
を含む)、Server Actions、Route Handlers、およびMiddlewareで使用できます。
この関数は、レスポンス(またはプリレンダリング)が完了した後に実行するコールバックを受け取ります:
import { unstable_after as after } from 'next/server'
// カスタムログ関数
import { log } from '@/app/utils'
export default function Layout({ children }: { children: React.ReactNode }) {
after(() => {
// レイアウトがレンダリングされ、ユーザーに送信された後に実行されます
log()
})
return <>{children}</>
}
import { unstable_after as after } from 'next/server'
// カスタムログ関数
import { log } from '@/app/utils'
export default function Layout({ children }) {
after(() => {
// レイアウトがレンダリングされ、ユーザーに送信された後に実行されます
log()
})
return <>{children}</>
}
Good to know:
unstable_after
はDynamic APIではなく、それを呼び出してもルートが動的にはなりません。静的なページ内で使用される場合、コールバックはビルド時またはページが再検証されたときに実行されます。
リファレンス
パラメータ
- レスポンス(またはプリレンダリング)完了後に実行するコールバック関数
サーバーレス関数の持続時間
unstable_after
は、プラットフォームのデフォルトまたは設定されたサーバーレス関数の最大持続時間で実行されます。プラットフォームがサポートしている場合、maxDuration
ルートセグメント構成を使ってタイムアウト制限を設定できます。
Good to know
unstable_after
は、レスポンスが正常に完了しなかった場合でも実行されます。エラーが投げられたときや、notFound
やredirect
が呼ばれたときも含みます。- React
cache
を使用して、unstable_after
内で呼び出される関数を重複排除できます。 cookies
は、レスポンスがすでに送信されているため、unstable_after
内部で設定できません。- Dynamic APIsは、
unstable_after
内では呼び出せません。それらをunstable_after
の外で呼び出し、返されたオブジェクトを使用してください。 unstable_after
は他のunstable_after
呼び出し内に入れ子にすることができます。たとえば、unstable_after
呼び出しをラップして追加機能を加えるユーティリティ関数を作成できます。
代替手段
unstable_after
の使用ケースは、主なレスポンスをブロックせずに二次的なタスクを処理することです。プラットフォームのwaitUntil()
を使用するか、プロミスからawait
を削除する場合と似ていますが、以下の違いがあります:
waitUntil()
: プロミスを受け取り、リクエストのライフサイクル中に実行されるタスクをキューに入れますが、unstable_after
はレスポンスが完了後に実行されるコールバックを受け取ります。await
を削除: レスポンス中に実行を開始し、リソースを使用します。レスポンスが送信された直後に計算を終了するサーバーレス環境では信頼性が低く、タスクを中断する可能性があります。
unstable_after
は他のNext.js APIやコンテキストを考慮して設計されているため、使用をお勧めします。
バージョン履歴 | 説明 |
---|---|
v15.0.0-rc | unstable_after が導入されました |