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 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 se produit uniquement lorsque le chemin est visité ensuite.
  • Actuellement, revalidatePath invalide toutes les routes dans le cache du routeur côté client. Ce comportement est temporaire et sera mis à jour à l'avenir pour s'appliquer uniquement au chemin spécifique.
  • L'utilisation de revalidatePath invalide uniquement le chemin spécifique dans le cache de route côté serveur.

Paramètres

revalidatePath(path: string, type?: 'page' | 'layout'): void;
  • path : 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), ou le segment de route littéral (par exemple, /product/123). Doit comporter moins de 1024 caractères. Cette valeur est sensible à la casse.
  • type : (optionnel) Chaîne 'page' ou 'layout' pour modifier le type de chemin à revalider. Si path contient un segment dynamique (par exemple, /product/[slug]/page), ce paramètre est requis.

Valeur de retour

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 de la page. 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 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 de la page. Cela entraînera la revalidation des pages situées sous le même layout lors de la prochaine visite. Par exemple, dans le cas ci-dessus, /blog/[slug]/[another] serait également revalidé lors de la prochaine visite.

Revalidation de toutes les données

import { revalidatePath } from 'next/cache'

revalidatePath('/', 'layout')

Cela purgera le cache du routeur côté client et revalidera le cache de données lors de la prochaine visite de la page.

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