メインコンテンツまでスキップ

unstable_expirePath

unstable_expirePath は、特定のパスに対してキャッシュされたデータをオンデマンドで削除することができます。

Good to know:

  • unstable_expirePath は、Node.js と Edge ランタイムの両方で利用可能です。
  • unstable_expirePath は、指定されたパスが次に訪問されたときにのみキャッシュを無効にします。つまり、unstable_expirePath を dynamic route segment で呼び出しても、すぐに多くの無効化がトリガーされるわけではありません。無効化は、パスが次に訪問されたときにのみ発生します。
  • 現在、unstable_expirePath は server action で使用されると、クライアントサイドの Router Cache内のすべてのルートを無効にします。この動作は一時的なものであり、将来的には特定のパスにのみ適用されるように更新されます。
  • unstable_expirePath を使用すると、サーバーサイドの Route Cache内の特定のパスのみが無効になります。

リファレンス

パラメータ

unstable_expirePath(path: string, type?: 'page' | 'layout'): void;
  • path: 期限切れにしたいデータに関連付けられたファイルシステムパスを表す文字列(例:/product/[slug]/page)またはリテラルのルートセグメント(例:/product/123)。1024文字未満である必要があります。この値は大文字と小文字を区別します。
  • type: (オプション)期限切れにするパスのタイプを変更するための 'page' または 'layout' 文字列。path に dynamic segment が含まれている場合(例:/product/[slug]/page)、このパラメータは必須です。パスがリテラルのルートセグメントを指す場合、例:dynamic page の /product/1(例:/product/[slug]/page)、type を指定する必要はありません。

戻り値

unstable_expirePath は値を返しません。

特定のURLの期限切れ

import { unstable_expirePath } from 'next/cache'
unstable_expirePath('/blog/post-1')

これは、次のページ訪問時に特定のURLのキャッシュを削除します。

ページパスの期限切れ

import { unstable_expirePath } from 'next/cache'
unstable_expirePath('/blog/[slug]', 'page')
// またはルートグループを使用して
unstable_expirePath('/(main)/blog/[slug]', 'page')

これは、次のページ訪問時に提供された page ファイルに一致する任意のURLのキャッシュを削除します。これは、特定のページの下にあるページを無効にしません。たとえば、/blog/[slug]/blog/[slug]/[author] を無効にしません。

レイアウトパスの期限切れ

import { unstable_expirePath } from 'next/cache'
unstable_expirePath('/blog/[slug]', 'layout')
// またはルートグループを使用して
unstable_expirePath('/(main)/post/[slug]', 'layout')

これは、次のページ訪問時に提供された layout ファイルに一致する任意のURLのキャッシュを削除します。これにより、同じレイアウトを持つ下位のページが次の訪問時に再検証されます。たとえば、上記の場合、/blog/[slug]/[another] も次の訪問時に再検証されます。

すべてのデータの期限切れ

import { unstable_expirePath } from 'next/cache'

unstable_expirePath('/', 'layout')

これは、次のページ訪問時にデータキャッシュを削除します。

サーバーアクション

Server Action で unstable_expirePath を呼び出すことができます:

app/actions.ts
'use server'

import { unstable_expirePath } from 'next/cache'

export default async function submit() {
await submitForm()
unstable_expirePath('/')
}

ルートハンドラー

ルートハンドラーで unstable_expirePath を呼び出すことができます:

app/api/expire/route.ts
import { unstable_expirePath } from 'next/cache'
import type { NextRequest } from 'next/server'

export async function GET(request: NextRequest) {
const path = request.nextUrl.searchParams.get('path')

if (path) {
unstable_expirePath(path)
return Response.json({ revalidated: true, now: Date.now() })
}

return Response.json({
expired: false,
now: Date.now(),
message: 'Missing path to expire',
})
}