revalidatePath
revalidatePath
permite purgar los datos en caché bajo demanda para una ruta específica.
Importante:
revalidatePath
está disponible tanto en los entornos de ejecución Node.js y Edge.revalidatePath
solo invalida la caché cuando la ruta incluida es visitada posteriormente. Esto significa que llamar arevalidatePath
con un segmento de ruta dinámica no activará inmediatamente muchas revalidaciones a la vez. La invalidación solo ocurre cuando la ruta es visitada nuevamente.- Actualmente,
revalidatePath
invalida todas las rutas en la caché del enrutador del lado del cliente (client-side Router Cache). Este comportamiento es temporal y se actualizará en el futuro para aplicarse solo a la ruta específica.- Usar
revalidatePath
invalida solo la ruta específica en la caché de ruta del lado del servidor (server-side Route Cache).
Parámetros
revalidatePath(path: string, type?: 'page' | 'layout'): void;
path
: Puede ser una cadena que represente la ruta del sistema de archivos asociada con los datos que desea revalidar (por ejemplo,/product/[slug]/page
), o el segmento de ruta literal (por ejemplo,/product/123
). Debe tener menos de 1024 caracteres. Este valor distingue entre mayúsculas y minúsculas.type
: (opcional) Cadena'page'
o'layout'
para cambiar el tipo de ruta a revalidar. Sipath
contiene un segmento dinámico (por ejemplo,/product/[slug]/page
), este parámetro es requerido.
Retorno
revalidatePath
no retorna ningún valor.
Ejemplos
Revalidando una URL específica
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/post-1')
Esto revalidará una URL específica en la próxima visita a la página.
Revalidando una ruta de página
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// o con grupos de rutas
revalidatePath('/(main)/post/[slug]', 'page')
Esto revalidará cualquier URL que coincida con el archivo page
proporcionado en la próxima visita. Esto no invalidará páginas debajo de la página específica. Por ejemplo, /blog/[slug]
no invalidará /blog/[slug]/[author]
.
Revalidando una ruta de layout
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'layout')
// o con grupos de rutas
revalidatePath('/(main)/post/[slug]', 'layout')
Esto revalidará cualquier URL que coincida con el archivo layout
proporcionado en la próxima visita. Esto hará que las páginas debajo con el mismo layout se revaliden en la próxima visita. Por ejemplo, en el caso anterior, /blog/[slug]/[another]
también se revalidaría en la próxima visita.
Revalidando todos los datos
import { revalidatePath } from 'next/cache'
revalidatePath('/', 'layout')
Esto purgará la caché del enrutador del lado del cliente (Client-side Router Cache) y revalidará la caché de datos en la próxima visita a la página.
Acción de servidor (Server Action)
'use server'
import { revalidatePath } from 'next/cache'
export default async function submit() {
await submitForm()
revalidatePath('/')
}
Manejador de ruta (Route Handler)
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',
})
}
import { revalidatePath } from 'next/cache'
export async function GET(request) {
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',
})
}