编程语言
748
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
),则此参数是必需的。如果路径指的是字面路由段,例如,对于动态页面(例如,/product/[slug]/page
)的路径/product/1
,则不应提供type
。
返回值
revalidatePath
不返回值。
示例
重新验证特定 URL
import { revalidatePath } from 'next/cache'; revalidatePath('/blog/post-1');
这将在下一次页面访问时重新验证一个特定的 URL。
重新验证页面路径
import { revalidatePath } from 'next/cache'; revalidatePath('/blog/[slug]', 'page'); // 或者使用路由组 revalidatePath('/(main)/blog/[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');
这将清除客户端路由缓存,并在下一次页面访问时重新验证数据缓存。
服务器操作
// 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: '缺少要重新验证的路径', }); }