跳到內容
API 參考函式revalidatePath

revalidatePath

revalidatePath 允許您隨需清除特定路徑的快取資料

要知道:

  • 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),則此參數為必填。如果路徑指的是字面路由區段,例如動態頁面的 /product/1(例如,/product/[slug]/page),則不應提供 type

回傳

revalidatePath 不會回傳值。

範例

重新驗證特定 URL

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

這將在下次頁面訪問時重新驗證一個特定 URL。

重新驗證頁面路徑

import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// or with route groups
revalidatePath('/(main)/blog/[slug]', 'page')

這將在下次頁面訪問時重新驗證任何符合提供的 page 檔案的 URL。這將不會使特定頁面下的頁面失效。例如,/blog/[slug] 不會使 /blog/[slug]/[author] 失效。

重新驗證版面配置路徑

import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'layout')
// or with route groups
revalidatePath('/(main)/post/[slug]', 'layout')

這將在下次頁面訪問時重新驗證任何符合提供的 layout 檔案的 URL。這將導致具有相同版面配置的下方頁面在下次訪問時重新驗證。例如,在上述情況下,/blog/[slug]/[another] 也會在下次訪問時重新驗證。

重新驗證所有資料

import { revalidatePath } from 'next/cache'
 
revalidatePath('/', 'layout')

這將清除用戶端路由器快取,並在下次頁面訪問時重新驗證資料快取。

伺服器行為

app/actions.ts
'use server'
 
import { revalidatePath } from 'next/cache'
 
export default async function submit() {
  await submitForm()
  revalidatePath('/')
}

路由處理器

app/api/revalidate/route.ts
import { revalidatePath } from 'next/cache'
import type { 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',
  })
}