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
が呼び出された場合も含まれます。 unstable_after
内で呼び出される関数を重複除去するために、Reactのcache
を使用できます。- レスポンスがすでに送信されているため、
unstable_after
内でcookies
を設定することは できません。 - 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 が導入されました。 |