revalidatePath

revalidatePath permite purgar datos en caché bajo demanda para una ruta específica.

Es bueno saber:

  • revalidatePath está disponible tanto en los entornos de ejecución Node.js y Edge.
  • revalidatePath solo invalida la caché cuando se visita la ruta incluida. Esto significa que llamar a revalidatePath con un segmento de ruta dinámica no activará inmediatamente muchas revalidaciones a la vez. La invalidación solo ocurre cuando la ruta se visita nuevamente.

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.
  • type: (opcional) Cadena 'page' o 'layout' para cambiar el tipo de ruta a revalidar.

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.

Acción de servidor

'use server'

import { revalidatePath } from 'next/cache'

export default async function submit() {
  await submitForm()
  revalidatePath('/')
}

Manejador de ruta

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',
  })
}