revalidateTag()
إبطال التخزين المؤقّت حسب الوسم revalidateTag()
تُعلِّم كل البيانات الموسومة بوسم معيّن أنها قديمة (stale)، فتُحدَّث بالخلفية بالزيارة القادمة لأي صفحة تستخدمها.
الوسوم تُضاف إما بخيار fetch(url, { next: { tags: ['posts'] } }) أو بدالة cacheTag جوّه نطاق 'use cache'. بعدها revalidateTag('posts', 'max') يبطل كل البيانات الموسومة بـ posts دفعة وحدة، بغض النظر أي صفحة استخدمتها.
مرّر 'max' كوسيط ثانٍ دايمًا — يعطي سلوك stale-while-revalidate (يعرض المخزَّن مؤقتًا ريثما يحدَّث بالخلفية). الشكل القديم بوسيط واحد فقط صار مهجورًا (deprecated).
الصياغة
revalidateTag(tag: string, profile: string | { expire?: number }): void📄 مثال
'use server';
import { revalidateTag } from 'next/cache';
export async function addPost() {
await saveNewPost();
revalidateTag('posts', 'max');
}أهم النقاط
| العنصر | الوظيفة |
|---|---|
| tag | نص الوسم، أقل من 256 حرف |
| profile | 'max' الموصى فيه (stale-while-revalidate)، أو بروفايل cacheLife مخصّص آخر |
💡 نصائح عملية
- مرّر 'max' كوسيط ثانٍ دايمًا — الشكل بوسيط واحد فقط صار قديمًا
- لو تحتاج تحديث فوري لقراءة المستخدم نفسه بعد كتابته مباشرة (read-your-own-writes)، استخدم updateTag بدلها
⚠️ أخطاء شائعة
- استدعاؤها من مكوّن عميل — تعمل فقط جوّه Server Functions وRoute Handlers
- توقّع تحديث فوري لكل الصفحات فورًا — الإبطال يصير بالزيارة القادمة لكل صفحة، مو لحظيًا للجميع بنفس الوقت
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار NEXTJS الكامل بالعربي.