revalidatePath

revalidatePath vous permet de purger les données en cache à la demande pour un chemin spécifique.

Bon à savoir :

  • revalidatePath est disponible dans les deux environnements d'exécution Node.js et Edge.
  • revalidatePath n'invalide le cache que lorsque le chemin inclus est visité ensuite. Cela signifie qu'appeler revalidatePath avec un segment de route dynamique ne déclenchera pas immédiatement de nombreuses revalidations à la fois. L'invalidation ne se produit que lorsque le chemin est visité à nouveau.

Paramètres

revalidatePath(path: string, type?: 'page' | 'layout'): void;
  • path : Soit une chaîne représentant le chemin du système de fichiers associé aux données que vous souhaitez revalider (par exemple, /product/[slug]/page), soit le segment de route littéral (par exemple, /product/123). Doit contenir moins de 1024 caractères.
  • type : (optionnel) Chaîne 'page' ou 'layout' pour modifier le type de chemin à revalider.

Valeur retournée

revalidatePath ne retourne aucune valeur.

Exemples

Revalidation d'une URL spécifique

import { revalidatePath } from 'next/cache'
revalidatePath('/blog/post-1')

Cela revalidera une URL spécifique lors de la prochaine visite de la page.

Revalidation d'un chemin de page

import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// ou avec des groupes de routes
revalidatePath('/(main)/post/[slug]', 'page')

Cela revalidera toute URL correspondant au fichier page fourni lors de la prochaine visite. Cela n'invalidera pas les pages situées sous la page spécifique. Par exemple, /blog/[slug] n'invalidera pas /blog/[slug]/[author].

Revalidation d'un chemin de mise en page (layout)

import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'layout')
// ou avec des groupes de routes
revalidatePath('/(main)/post/[slug]', 'layout')

Cela revalidera toute URL correspondant au fichier layout fourni lors de la prochaine visite. Cela entraînera la revalidation des pages situées sous la même mise en page lors de la prochaine visite. Par exemple, dans le cas ci-dessus, /blog/[slug]/[another] serait également revalidé lors de la prochaine visite.

Action serveur

'use server'

import { revalidatePath } from 'next/cache'

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

Gestionnaire de route

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: 'Chemin manquant pour la revalidation',
  })
}
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: 'Chemin manquant pour la revalidation',
  })
}