跳至內容
API 參考函式revalidatePath

revalidatePath

revalidatePath 允許您針對特定路徑依需求清除 快取的資料

注意事項:

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

回傳值 範例 重新驗證特定網址
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/post-1')

這將在下次瀏覽頁面時重新驗證一個特定網址。

重新驗證頁面路徑
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// or with route groups
revalidatePath('/(main)/blog/[slug]', 'page')

這將在下次瀏覽頁面時重新驗證任何與提供的 page 檔案相符的網址。這**不會**使特定頁面下方的頁面失效。例如,/blog/[slug] 不會使 /blog/[slug]/[author] 失效。

重新驗證佈局路徑

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

這將會在下次瀏覽頁面時,重新驗證任何與提供的layout檔案匹配的網址。這會導致使用相同佈局的子頁面在下一次瀏覽時也進行重新驗證。例如,在上述情況下,/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',
  })
}