revalidatePath

revalidatePath ermöglicht es Ihnen, zwischengespeicherte Daten bei Bedarf für einen bestimmten Pfad zu löschen.

Wissenswert:

  • revalidatePath ist in beiden Node.js- und Edge-Runtimes verfügbar.
  • revalidatePath invalidiert den Cache nur, wenn der angegebene Pfad das nächste Mal aufgerufen wird. Das bedeutet, dass der Aufruf von revalidatePath mit einem dynamischen Routensegment nicht sofort viele Revalidierungen auslöst. Die Invalidierung erfolgt erst beim nächsten Aufruf des Pfads.
  • Aktuell invalidiert revalidatePath alle Routen im Client-seitigen Router-Cache. Dieses Verhalten ist temporär und wird in Zukunft aktualisiert, um nur den spezifischen Pfad zu betreffen.
  • Die Verwendung von revalidatePath invalidiert nur den spezifischen Pfad im Server-seitigen Route-Cache.

Parameter

revalidatePath(path: string, type?: 'page' | 'layout'): void;
  • path: Entweder ein String, der den Dateisystempfad der zu revalidierenden Daten darstellt (z.B. /product/[slug]/page), oder das literale Routensegment (z.B. /product/123). Muss weniger als 1024 Zeichen lang sein. Dieser Wert ist case-sensitive.
  • type: (optional) 'page' oder 'layout' String, um den Typ des zu revalidierenden Pfads zu ändern. Wenn path ein dynamisches Segment enthält (z.B. /product/[slug]/page), ist dieser Parameter erforderlich.

Rückgabewert

revalidatePath gibt keinen Wert zurück.

Beispiele

Revalidierung einer spezifischen URL

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

Dies revalidiert eine spezifische URL beim nächsten Seitenaufruf.

Revalidierung eines Seitenpfads

import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// oder mit Routengruppen
revalidatePath('/(main)/post/[slug]', 'page')

Dies revalidiert alle URLs, die der angegebenen page-Datei entsprechen, beim nächsten Seitenaufruf. Dies invalidierte nicht Seiten unterhalb der spezifischen Seite. Zum Beispiel würde /blog/[slug] nicht /blog/[slug]/[author] invalidieren.

Revalidierung eines Layout-Pfads

import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'layout')
// oder mit Routengruppen
revalidatePath('/(main)/post/[slug]', 'layout')

Dies revalidiert alle URLs, die der angegebenen layout-Datei entsprechen, beim nächsten Seitenaufruf. Dadurch werden auch Seiten unterhalb mit demselben Layout beim nächsten Aufruf revalidiert. Im obigen Beispiel würde /blog/[slug]/[another] ebenfalls beim nächsten Aufruf revalidiert werden.

Revalidierung aller Daten

import { revalidatePath } from 'next/cache'

revalidatePath('/', 'layout')

Dies löscht den Client-seitigen Router-Cache und revalidiert den Data Cache beim nächsten Seitenaufruf.

Server Action

'use server'

import { revalidatePath } from 'next/cache'

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

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