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',
})
}
這有幫助嗎?