revalidatePath
revalidatePath
を使用すると、特定のパスに対してオンデマンドでキャッシュデータを削除できます。
補足情報:
revalidatePath
はNode.js と Edge ランタイムの両方で利用可能です。revalidatePath
は指定されたパスが次にアクセスされたときにのみキャッシュを無効化します。つまり、動的なルートセグメントを含むパスでrevalidatePath
を呼び出しても、すぐに多くの再検証がトリガーされるわけではありません。無効化は次にそのパスがアクセスされたときに発生します。- 現在、
revalidatePath
はクライアントサイドのルーターキャッシュ内のすべてのルートを無効化します。この動作は一時的なもので、将来は指定されたパスのみに適用されるように更新される予定です。revalidatePath
を使用すると、サーバーサイドのルートキャッシュ内の特定のパスのみが無効化されます。
パラメータ
revalidatePath(path: string, type?: 'page' | 'layout'): void;
path
: 再検証したいデータに関連するファイルシステムパスを表す文字列(例:/product/[slug]/page
)、またはリテラルなルートセグメント(例:/product/123
)。1024文字未満である必要があります。この値は大文字と小文字を区別します。type
: (オプション)再検証するパスのタイプを変更するための'page'
または'layout'
文字列。path
が動的セグメントを含む場合(例:/product/[slug]/page
)、このパラメータは必須です。
戻り値
revalidatePath
は値を返しません。
使用例
特定のURLを再検証
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/post-1')
これにより、次回のページアクセス時に特定のURLが再検証されます。
ページパスを再検証
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// またはルートグループを使用
revalidatePath('/(main)/post/[slug]', 'page')
これにより、次回のページアクセス時に指定された page
ファイルに一致する任意のURLが再検証されます。これにより、特定のページ以下のページは無効化されません。例えば、/blog/[slug]
は /blog/[slug]/[author]
を無効化しません。
レイアウトパスを再検証
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'layout')
// またはルートグループを使用
revalidatePath('/(main)/post/[slug]', 'layout')
これにより、次回のページアクセス時に指定された layout
ファイルに一致する任意のURLが再検証されます。これにより、同じレイアウトを持つ下位のページも次回アクセス時に再検証されます。例えば、上記のケースでは /blog/[slug]/[another]
も次回アクセス時に再検証されます。
すべてのデータを再検証
import { revalidatePath } from 'next/cache'
revalidatePath('/', 'layout')
これにより、クライアントサイドのルーターキャッシュが削除され、次回のページアクセス時にデータキャッシュが再検証されます。
サーバーアクション
'use server'
import { revalidatePath } from 'next/cache'
export default async function submit() {
await submitForm()
revalidatePath('/')
}
ルートハンドラー
import { revalidatePath } from 'next/cache'
import { NextRequest } from 'next/server'
export async function GET(request: NextRequest) {
const path = request.nextUrl.searchParams.get('path')
if (path) {
revalidatePath(path)
return Response.json({ revalidated: true, now: Date.now() })
}
return Response.json({
revalidated: false,
now: Date.now(),
message: 'Missing path to revalidate',
})
}
import { revalidatePath } from 'next/cache'
export async function GET(request) {
const path = request.nextUrl.searchParams.get('path')
if (path) {
revalidatePath(path)
return Response.json({ revalidated: true, now: Date.now() })
}
return Response.json({
revalidated: false,
now: Date.now(),
message: 'Missing path to revalidate',
})
}