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

React / سلوك تطبيق منسق / الدرس 10

تحميل البيانات وضبط السباقات

مثل النتائج غير المتزامنة صراحة وامنع القديم من استبدال نية أحدث.

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

أهداف الدرس

  • اختيار حد التحميل
  • تجاهل نتيجة مزامنة قديمة
  • اختبار الترتيب والتعافي

اختيار حد التحميل

قد تنسق محملات الإطار أو طبقة بيانات التخزين والتوازي والخادم والتنقل أفضل من Effects معزولة. لا توفر React كل السياسات. وضح حدود المثال المباشر وما قد يسببه من تسلسل وتكرار وغياب تخزين. حدد مالك الطلب وهوية البيانات وإعادة الاستخدام وافصل النقل والتحليل والتحقق والعرض؛ فلا يثبت نجاح HTTP الصحة والتفويض.

نمذجة الانتظار والنجاح والفشل

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

تجاهل نتيجة مزامنة قديمة

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

jsx وحدة مكون — تتطلب مضيف React الموضح بالمقرر
import { useEffect, useState } from "react";
function load(id) { return new Promise(resolve => setTimeout(() => resolve(id === "a" ? "Alpha" : "Beta"), id === "a" ? 40 : 5)); }
export default function App() { const [id, setId] = useState("a"); const [result, setResult] = useState("Loading"); useEffect(() => { let ignore = false; setResult("Loading"); load(id).then(value => { if (!ignore) setResult(value); }); return () => { ignore = true; }; }, [id]); return <main><h1>Current record</h1><button type="button" onClick={() => setId("b")}>Choose Beta</button><p>{result}</p></main>; }
الناتج المتوقع
Choose Beta before Alpha resolves: final result Beta.

يبطل التنظيف نشر Alpha عند تغير المعرف ويبقى الناتج Beta رغم اكتمال الوعد القديم.

فصل طلب الحدث عن طلب Effect

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

jsx وحدة مكون — تتطلب مضيف React الموضح بالمقرر
import { useState } from "react";
export default function App() { const [status, setStatus] = useState("Idle"); async function check() { setStatus("Pending"); try { await Promise.reject(new Error("Synthetic unavailable")); setStatus("Ready"); } catch { setStatus("Check unavailable; try again"); } } return <main><h1>Local check</h1><button type="button" disabled={status === "Pending"} onClick={check}>Check</button><p>{status}</p></main>; }
الناتج المتوقع
Initial: Idle. After Check: Check unavailable; try again.

يملك الحدث الوعد ويراقب رفضه ولا يعلن نجاحا للفشل.

اختبار الترتيب والتعافي

اضبط المحمل ليكتمل القديم والجديد عكس الترتيب وأكد نشر الحالي ورسالة تعاف للفشل. اختبر الفراغ والتكرار وتغير المستخدم والمغادرة. لا يكفي توقيت المتصفح؛ استخدم وعودا مضبوطة أو جدولة اختبار. افحص النقل والتفويض بعينات معزولة؛ فلا تثبت الدوارة التخزين والحداثة والأمان.

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

يستبدل رد قديم السجل

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

يُفترض أن التنظيف يلغي كتابة بعيدة

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

يعرض نجاح HTTP بيانات خاطئة

لماذا يحدث؟
تجاوز نجاح النقل التحقق.
كيف تصلحه؟
تحقق من العقد قبل النشر.
كيف تتجنب تكراره؟
اختبر التلف وعدم التفويض.

اختبر فهمك

1. كيف يثبت اختبار حماية القديم دون شبكة حقيقية؟

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

قدم محملا مضبوطا وابدأ A ثم B وأكمل B ثم A وأكد بقاء B. راقب الوعدين والتنظيف، فتختبر القاعدة لا أملا بزمن خدمة.

2. لماذا تختلف حالة قائمة فارغة وفشل طلب؟

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

الفراغ جواب ناجح والفشل غياب جواب صالح. يوهم دمجهما عدم وجود سجلات. قدم حالة صادقة وتعافيا وافرض الوصول خارج العرض.

أهم ما تعلمته

  • يحتاج الطلب مالكا وهوية.
  • تختلف حماية القديم عن الإلغاء.
  • لا يثبت عرض التحميل الثقة.

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