revalidatePath

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

Bon à savoir :

  • 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 du cache côté client du routeur lorsqu'il est utilisé dans une action serveur. 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 soit 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 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. Si path fait référence au segment de route littéral, par exemple /product/1 pour une page dynamique (par exemple, /product/[slug]/page), vous ne devez pas fournir type.

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)/blog/[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 avec 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 côté client du routeur 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 type { 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',
  })
}

On this page