revalidatePath
revalidatePath позволяет вам очистить данные кэша по запросу для определенного пути.
Важно знать:
revalidatePathдоступен как в средах Node.js, так и Edge.revalidatePathделает недействительным кэш только при следующем посещении включённого пути. Это означает, что вызовrevalidatePathс динамическим сегментом маршрута не вызовет сразу множество повторных валидаций. Действительность происходит только при следующем посещении пути.- В настоящее время
revalidatePathделает недействительными все маршруты в кэше маршрутизатора на стороне клиента. Это поведение временное и будет обновлено в будущем, чтобы применять его только к конкретному пути.- Использование
revalidatePathделает недействительным только конкретный путь в кэше маршрутов на стороне сервера.
Параметры
revalidatePath(path: string, type?: 'page' | 'layout'): void;
-
path: Строка, представляющая файловый путь, связанный с данными, которые вы хотите перевалидировать (например,/product/[slug]/page), или буквальный сегмент маршрута (например,/product/123). Должно быть меньше 1024 символов. Это значение чувствительно к регистру. -
type: (необязательно) Строка'page'или'layout'для изменения типа пути, который нужно перевалидировать. Еслиpathсодержит динамический сегмент (например,/product/[slug]/page), этот параметр обязателен.
Возвращаемое значение
revalidatePath не возвращает никакого значения.
Примеры
Перевалидация конкретного URL
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/post-1')
Это перевалидирует один конкретный URL при следующем посещении страницы.
Перевалидация пути страницы
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'page')
// or with route groups
revalidatePath('/(main)/post/[slug]', 'page')
Это перевалидирует любой URL, который соответствует предоставленному файлу page при следующем посещении страницы. Это не сделает недействительными страницы под конкретной страницей. Например, /blog/[slug] не сделает недействительным /blog/[slug]/[author].
Перевалидация пути макета
import { revalidatePath } from 'next/cache'
revalidatePath('/blog/[slug]', 'layout')
// or with route groups
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 { 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',
})
}
© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/app/api-reference/functions/revalidatePath