0Pricing
React Academy · درس

‏useSWR: الجلب وحالات التحميل والأخطاء

استخدم useSWR مع دوال fetcher مخصصة، وتعامل مع حالات التحميل والخطأ والنجاح بطريقة تصريحية

‏useSWR: الجلب وحالات التحميل والأخطاء درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

توقيع useSWR

يُعدّ useSWR(key, fetcher, options) هو hook الأساسي. ويمثل key مفتاح الذاكرة المؤقتة (وعادةً ما يكون سلسلة URL)، ويمثل fetcher الدالة غير المتزامنة التي تعيد البيانات، أما options فهو كائن إعداد اختياري.

يعيد hook كائنًا يحتوي على data وerror وisLoading وisValidating ودالة mutate.

المعامل key

يمكن أن يكون key عنوان URL على شكل سلسلة، أو مصفوفة من [url, params]، أو null. وترتبط المفاتيح النصية بطلبات GET البسيطة. وتتيح مفاتيح المصفوفات تضمين متغيرات مثل userId أو filters ضمن هوية الذاكرة المؤقتة.

يؤدي تمرير null إلى تعطيل الطلب بالكامل، وهو مفيد للجلب الشرطي عندما لا تتوفر البيانات المطلوبة بعد.

دالة fetcher

تتلقى fetcher المفتاح (أو عناصر مفتاح المصفوفة موزعةً كوسائط)، ويجب أن تعيد Promise. وتصبح القيمة الناتجة عن حل Promise هي data. وإذا أطلقت fetcher استثناءً، فتُضبط الخاصية error.

مثال: (url) => fetch(url).then(r => { if (!r.ok) throw new Error(r.status); return r.json(); }).

حالتا data وerror

تكون data بقيمة undefined أثناء التحميل للمرة الأولى، وتساوي القيمة التي أعادتها fetcher بعد نجاحها. وتكون error بقيمة undefined ما لم تُطلق fetcher استثناءً، وعندها تحتوي على كائن الخطأ المُطلَق.

تحققوا من if (error) لعرض رسالة خطأ، ومن if (!data) لعرض هيكل تحميل، وبذلك توفرون واجهات احتياطية واضحة.

isLoading مقابل isValidating

تكون isLoading بقيمة true فقط عند عدم وجود بيانات مخزنة مؤقتًا ووجود طلب قيد التنفيذ، أي عند التحميل الأول لهذا المفتاح. أما isValidating فتكون بقيمة true في أي وقت يوجد فيه طلب قيد التنفيذ، بما في ذلك عمليات إعادة التحقق في الخلفية عندما تكون البيانات المخزنة مؤقتًا موجودة بالفعل.

استخدموا isLoading لشاشات الهياكل التحميلية، وisValidating لمؤشر تحميل خفيف يشير إلى تحديث في الخلفية.

SWRConfig العامة

تتيح لكم SWRConfig تحديد fetcher الافتراضية وdedupingInterval وrefreshInterval ومعالج onError وغير ذلك من الخيارات لجميع استدعاءات useSWR ضمن الشجرة التابعة لها. وبهذا تُوحَّد الإعدادات بدلًا من تكرار الخيارات في كل hook.

يمكنكم تداخل موفري SWRConfig متعددين لتحديد إعدادات افتراضية مختلفة لأقسام مختلفة من تطبيقكم.

الجلب الشرطي باستخدام مفتاح null

مرروا null بوصفه المفتاح لتخطي الطلب: useSWR(isLoggedIn ? '/api/user' : null, fetcher). ولن يجلب SWR البيانات حتى يصبح المفتاح قيمة غير null.

هذا أنظف من خيار skip في React Query. ويؤدي انتقال المفتاح من null إلى سلسلة نصية تلقائيًا إلى تشغيل أول عملية جلب.

الجلب التابع

اربطوا بين hooks الخاصة بـ SWR للطلبات التابعة: const { data: user } = useSWR('/api/me', fetcher) ثم const { data: orders } = useSWR(user ? '/api/orders/' + user.id : null, fetcher). وينتظر hook الثاني حتى يكتمل الأول.

يتجنب هذا النمط سلاسل useEffect، ويحافظ على تبعية البيانات بصورة وصفية وسهلة القراءة.

إلغاء ازدواجية الطلبات عمليًا

إذا استدعى مكوّنا Header وSidebar كلاهما useSWR('/api/user', fetcher)، فلن يرسل SWR سوى طلب واحد، ويشارك النتيجة بينهما. ويعيد كلا المكونين التصيير معًا عند تحديث data أو error.

تحدث عملية إلغاء الازدواجية هذه تلقائيًا ضمن نافذة dedupingInterval (وقيمتها الافتراضية 2000ms)، دون أي إعداد إضافي.

خيارات SWR المفيدة

يُجري refreshInterval: 5000 استطلاعًا كل 5 ثوانٍ. ويوقف refreshWhenHidden: false الاستطلاع عندما لا تكون علامة التبويب مرئية. ويعطّل shouldRetryOnError: false إعادة المحاولة التلقائية. ويعطّل revalidateOnFocus: false إعادة التحقق عند استعادة التركيز.

اجمعوا الخيارات بما يتوافق مع متطلبات حداثة بياناتكم؛ فكثيرًا ما تستخدم لوحات المعلومات refreshInterval، بينما يضبط المحتوى الثابت revalidateOnFocus: false.

ترقيم الصفحات باستخدام useSWR

بالنسبة إلى البيانات المقسمة إلى صفحات، أدرجوا رقم الصفحة في المفتاح: useSWR(['/api/items', page], fetcher). يؤدي تغيير الصفحة إلى جلب بيانات تلك الصفحة، مع تخزين الصفحات السابقة مؤقتًا.

يوفر SWR أيضًا useSWRInfinite لأنماط المؤشر أو التمرير اللانهائي، باستخدام دالة getKey التي تنشئ المفاتيح بناءً على فهرس الصفحة وبيانات الصفحة السابقة.

مفتاح SWR بقيمة null

ماذا يحدث عند تمرير null بوصفه المفتاح إلى useSWR؟

مراجعة الدرس

يعيد useSWR(key, fetcher) قيم data وerror وisLoading وisValidating. وتعطّل المفاتيح التي قيمتها null الجلب للطلبات الشرطية والتابعة. وتشير isLoading إلى التحميل الأول، بينما تشير isValidating إلى أي طلب قيد التنفيذ. وتوحّد SWRConfig الإعدادات الافتراضية، ويحدث إلغاء ازدواجية الطلبات بين المكونات تلقائيًا.

تتيح خيارات مثل refreshInterval وrevalidateOnFocus وshouldRetryOnError ضبط سلوك حداثة البيانات بدقة لكل hook أو على مستوى التطبيق بأكمله.

الأسئلة الشائعة

هل درس «‏useSWR: الجلب وحالات التحميل والأخطاء» مجاني؟

نعم — نص درس «‏useSWR: الجلب وحالات التحميل والأخطاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏useSWR: الجلب وحالات التحميل والأخطاء»؟

استخدم useSWR مع دوال fetcher مخصصة، وتعامل مع حالات التحميل والخطأ والنجاح بطريقة تصريحية تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «‏useSWR: الجلب وحالات التحميل والأخطاء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المفاهيم الأساسية في SWR: قديم-مع-إعادة-التحقق
  2. ‏useSWR: الجلب وحالات التحميل والأخطاء
  3. Mutation والتحديثات المتفائلة مع SWR
  4. ‏SWR أم React Query: اختيار الأداة المناسبة
← العودة إلى React Academy