محتويات الدورة

Next.js / المتوسط: السلطة والحداثة وتجربة المسار / الدرس 10

نتائج الكتابة والعلامات وإعادة تحقق المسارات

اربط كتابة مجال مؤكدة بسلوك المخبأ والواجهة الصحيح دون خلط إعادة التحقق بالذرية.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • ميز revalidateTag بملف يقدم القديم وupdateTag وrevalidatePath.
  • احفظ هوية الطلب والنتائج المعتمدة عند فقد الرد.

احفظ عملية العمل قبل تحديث مخابئ العرض

يتحقق الفعل ويفوض وينفذ عملية متماسكة قبل إبطال التمثيل. ليست API المخبأ معاملة ولا ضمان رسالة مرة واحدة. استعمل النسخة لتعارض تعديل جديد ومفتاح العملية للإعادة الآمنة؛ فالمشكلتان مختلفتان. إذا فقد الرد بعد الحفظ سو الأصل ولا تفترض فشلاً وتكرر الأثر. أعد قيماً معتمدة أو حالة ثابتة بدلاً من الاعتماد على التفاؤل. يظل ترتيب الخطوات مهماً: إبطال قبل فشل كتابة قد يسبب ملئاً من بيانات لم تتغير، بينما فشل الإبطال بعد نجاح الحفظ لا يعني أن المعاملة تراجعت تلقائياً.

اختر دلالات الحداثة التي يحتاجها المستخدم

تعلم revalidateTag(tag,"max") بيانات العلامة قديمة وتسمح بالقديم أثناء التحديث. تخص updateTag أفعال الخادم وتنهي الصلاحية فوراً لرؤية الكتابة، وتستهدف revalidatePath صفحة أو تخطيطاً بتوقيت يعتمد السياق. ليست مسوحاً عامة متبادلة. يستعمل الجزء updateTag بعد تسمية مؤكدة داخل فعل، ويجب أن تكون العلامة مرتبطة بالتمثيل المخزن. الاعتمادات والهوية مفترضة ولا ينفذ إبطال. اختر المعنى من متطلب المجال؛ فملف يعرض القديم مناسب لوصف قد لا يناسب رسالة تؤكد للمحرر رؤية التعديل الذي حفظه للتو.

typescript فعل توضيحي ينهي صلاحية العلامة فوراً
"use server";
import {updateTag} from "next/cache";
export async function rename(input:RenameInput) {
  const principal=await currentPrincipal();
  const result=await catalog.renameFor(principal,validateRename(input));
  updateTag(`course:${result.id}`);
  return {id:result.id,title:result.title,revision:result.revision};
}

سياق الفعل وربط العلامة شرطان سابقان، ولم تنفذ كتابة أو مسار منشور لرؤية النتيجة.

أبطل التمثيلات التي تعتمد الكتابة فعلياً

قد يغير العنوان بطاقة وعضوية بحث وقائمة مرتبة وبيانات وصفية. لا يعيد تحديث كيان أو علامة واحدة حساب كل مستهلك. وثق المالك والاعتماد وقيد المفردات وأبعد الاعتماد السري عن العلامات. قد يؤثر إبطال المعالج في زيارة لاحقة لا الشجرة المعروضة، وقد تجلب refresh مصدراً مخزناً. اختبر الحداثة والتسوية منفصلتين وسباق الملء. تحتاج مراجعة الكاتب معرفة التمثيلات المشتقة لا مجرد الملف الذي نفذ الحفظ، لأن المستخدم قد يرى بطاقة صحيحة وقائمة بترتيب سابق في الزيارة نفسها.

تحقق من الإعادة المنطقية دون ادعاء تخزين دائم

تسجل الخريطة نتيجة كتابة وتعيدها للمفتاح والبصمة نفسيهما وترفض التغيير. لا تحمي عمالاً متزامنين أو تصمد لإعادة البدء أو تنسق معاملة وإبطالاً حقيقيين. توضح لماذا تبقى إعادة فقد الرد العملية نفسها. يربط الإنتاج المفتاح بالهوية والنطاق والاحتفاظ. لا تعيد المفتاح لتعديل جديد لأن معرف الكائن ثابت. يجب أن تميز النتيجة بين محاولة لم تنفذ بعد ومحاولة محفوظة ينتظر العميل تأكيدها، وإلا قد يفسر تعارض النسخة بعد نجاح الأولى كدليل فشل غير صحيح.

javascript نموذج محلي كامل لإعادة الكتابة
const results=new Map();let effects=0;
function write(key,fingerprint) {
  if (results.has(key)) {const old=results.get(key);if(old.fingerprint!==fingerprint)throw new Error("KEY_REUSED");return old.result;}
  const result={revision:++effects};results.set(key,{fingerprint,result});return result;
}
console.assert(write("r1","c1@4").revision===1);
console.assert(write("r1","c1@4").revision===1);
let rejected=false;try {write("r1","c1@5");}catch {rejected=true;}
console.assert(rejected && effects===1);

يحفظ أثر واحد للمطابقة ويرفض التغيير دون مخبأ أو معاملة أو فعل خادم.

اختبر الحفظ والعرض كحدين منفصلين

اختبر المخالف بلا كتابة والمنع والتعارض والنجاح والمطابقة وفقد الرد. ثم افحص العلامة والمسار ونتيجة العميل وفق النمط. يحتاج فشل الإبطال بعد الحفظ تسوية ودليلاً آمناً لا تكرار الأثر. الصيغة الأحادية لـrevalidateTag مهملة بالتوثيق؛ استعمل ملفاً صريحاً مدعوماً أو سياق updateTag المناسب. يشغل المقرر الخريطة فقط ولا يختبر الوقت أو الأفعال أو المسار أو المتصفح. ينبغي أن يوضح التقرير أي جزء من سلوك القراءة بعد الكتابة تحقق فعلاً وأي جزء ما زال استنتاجاً من المثال غير المشغل.

الأخطاء الشائعة وإصلاحها

يعامل ملف يقدم القديم كرؤية كتابة فورية

لماذا يحدث؟
افترض أن دلالات إعادة التحقق المختلفة متبادلة.
كيف تصلحه؟
اختر API والملف المدعومين لمتطلب الحداثة المحدد.
كيف تتجنب تكراره؟
اختبر قراءة المستخدم الحالي بعد الكتابة.

يكرر فشل التحديث أثراً محفوظاً

لماذا يحدث؟
فسر فشل العرض كعدم تنفيذ عملية المجال.
كيف تصلحه؟
سو النتيجة بهوية العملية قبل إعادة المحاولة.
كيف تتجنب تكراره؟
اختبر حفظاً يتبعه فشل إبطال أو رد.

تبقى بطاقة معادة التسمية بقائمة مرشحة خاطئة

لماذا يحدث؟
لم تدخل الاعتمادات المعنوية للكتابة في خطة الإبطال.
كيف تصلحه؟
راجع شروط القائمة وترتيبها وملكية المسارات والعلامات المعنية.
كيف تتجنب تكراره؟
استخدم عينة اسم تنقل السجل عبر حد القائمة الظاهر.

اختبر فهمك

1. هل تجعل updateTag كتابة القاعدة السابقة ذرية مع إبطال المخبأ؟

اعرض الحل المشروح

لا. تبقى الكتابة والإبطال حدين منفصلين وقد تحفظ الأولى قبل فشل الثانية. احفظ نتيجتها المعتمدة وهويتها ثم سو التمثيل أو أصلحه بأمان. لا تكرر أثر عمل محفوظاً لمجرد إعادة تحديث مخبأ.

2. لماذا يجب أن تكون العلامة مرتبطة مسبقاً بالبيانات المتأثرة؟

اعرض الحل المشروح

لا تؤثر تسمية الإبطال في مداخل غير مرتبطة. يربط المنتج العلامة وفق العقد ويستخدم الكاتب المفردات المطابقة. تحقق من المستهلكين والمسارات الفعلية ولا تفترض أن اسماً مشابهاً يحدث كل موضع يظهر فيه المقرر.

أهم ما تعلمته

  • تطابق دلالات إعادة التحقق متطلب حداثة المجال.
  • يحتاج إصلاح المخبأ وإعادة العمل مسؤوليتين منفصلتين.

المراجع الرسمية