revalidatePath
Функция revalidatePath
позволяет очищать кэшированные данные по запросу для указанного пути.
Полезно знать:
revalidatePath
доступна как в Node.js, так и в Edge средах выполнения.revalidatePath
инвалидирует кэш только при следующем посещении указанного пути. Это означает, что вызовrevalidatePath
с динамическим сегментом маршрута не приведёт к немедленной массовой инвалидации. Инвалидация произойдёт только при следующем посещении пути.
Параметры
revalidatePath(path: string, type?: 'page' | 'layout'): void;
path
: Может быть строкой, представляющей файловый путь, связанный с данными, которые нужно ревалидировать (например,/product/[slug]/page
), или литеральным сегментом маршрута (например,/product/123
). Должен быть короче 1024 символов.type
: (опционально) Строка'page'
или'layout'
для указания типа пути для ревалидации.
Возвращаемое значение
Функция revalidatePath
не возвращает никакого значения.
Примеры использования
Ревалидация конкретного URL
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/post-1')
Это приведёт к ревалидации конкретного URL при следующем посещении страницы.
Ревалидация пути страницы
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// или с группами маршрутов
revalidatePath('/(main)/post/[slug]', 'page')
Это приведёт к ревалидации любого URL, соответствующего указанному файлу page
, при следующем посещении. Это не затронет страницы, находящиеся ниже указанной. Например, /blog/[slug]
не инвалидирует /blog/[slug]/[author]
.
Ревалидация пути макета
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'layout')
// или с группами маршрутов
revalidatePath('/(main)/post/[slug]', 'layout')
Это приведёт к ревалидации любого URL, соответствующего указанному файлу layout
, при следующем посещении. Это вызовет ревалидацию страниц ниже с тем же макетом при следующем посещении. Например, в приведённом выше случае /blog/[slug]/[another]
также будет ревалидирован при следующем посещении.
Серверное действие
'use server'
import { revalidatePath } from 'next/cache'
export default async function submit() {
await submitForm()
revalidatePath('/')
}
Обработчик маршрута
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',
})
}