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