revalidatePath

تتيح لك revalidatePath إزالة البيانات المخزنة مؤقتًا حسب الطلب لمسار معين.

معلومة مفيدة:

  • revalidatePath تقوم فقط بإبطال ذاكرة التخزين المؤقت عند زيارة المسار المضمن بعد ذلك. هذا يعني أن استدعاء revalidatePath مع جزء مسار ديناميكي لن يؤدي إلى تشغيل العديد من عمليات إعادة التحقق على الفور. يحدث الإبطال فقط عند زيارة المسار بعد ذلك.
  • حاليًا، تقوم revalidatePath بإبطال جميع المسارات في ذاكرة التخزين المؤقت لموجه العميل (client-side Router Cache) عند استخدامها في إجراء خادم. هذا السلوك مؤقت وسيتم تحديثه في المستقبل ليطبق فقط على المسار المحدد.
  • يؤدي استخدام 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',
  })
}