revalidatePath
revalidatePath
允许你按需清除特定路径的缓存数据。
须知:
revalidatePath
仅在下次访问包含的路径时使缓存无效。这意味着使用动态路由段调用revalidatePath
不会立即触发多次重新验证。失效只在下次访问路径时发生。- 目前,当在服务器操作中使用时,
revalidatePath
会使 客户端 Router Cache 中的所有路由失效。此行为是临时的,将来会更新为仅应用于特定路径。- 使用
revalidatePath
仅使 服务器端 Route Cache 中 特定路径 失效。
参数
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')
这将清除客户端 Router Cache,并在下次页面访问时重新验证数据缓存。
服务器操作
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',
})
}
这是否有帮助?