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',
  })
}

On this page