如何在 Next.js 中重新验证特定动态段 (/product/123),而不重新验证所有段 (/product/[id])?- Next.js 13.4.6

Sad*_*ani 5 next.js nextjs-dynamic-routing next.js13

我正在开发Next.js项目版本 13.4.6并且我有一个动态路由 /product/[id]当特定产品的内容发生更改时,我需要重新验证其数据,例如/product/123

\n

我知道revalidatePath函数,它允许重新验证与特定路径关联的数据。但是,当我将 revalidatePath 与动态段(例如 revalidatePath('/product/[id]') 一起使用时),它会重新验证/product/[id] 下的所有段

\n

以下是演示如何使用 revalidatePath 函数的示例代码片段:

\n
import { NextRequest, NextResponse } from 'next/server'\nimport { revalidatePath } from 'next/cache'\n\nexport async function GET(request: NextRequest) {\n  const path = request.nextUrl.searchParams.get('path') || '/'\n  revalidatePath(path)\n  return NextResponse.json({ revalidated: true, now: Date.now() })\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Next.js版本13.4.6文档表示 revalidatePath 函数接受单个参数 path,该参数应该是一个字符串,表示与要重新验证的数据关联的文件系统路径。这不是字面意思的路由段(例如/product/123),而是文件系统上的路径(例如/product/[id])\xe2\x80\x8b\xe2\x80\x8b。

\n

我想要实现的是有选择地仅重新验证特定的产品 ID,例如 /product/123,而不重新验证 /product/[id] 下的所有其他段。

\n

有没有办法在 Next.js 13 中实现这种选择性重新验证

\n

任何经过测试的替代策略或最佳实践将不胜感激。

\n

先感谢您!

\n

Ice*_*bon 1

根据文档,问题现已解决。

revalidatePath 函数现在允许我们重新验证动态路径中的文字路径段,而无需重新验证所有其他动态段。

https://nextjs.org/docs/app/api-reference/functions/revalidatePath