أنماط التفاؤل مع React Query وZustand
استخدم عمليات الاستدعاء onMutate وonError وonSettled في React Query وZustand لسير عمل منظم للواجهة المتفائلة
أنماط التفاؤل مع React Query وZustand درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
نظرة عامة على React Query useMutation
يوفر الخطاف useMutation في React Query بنية أساسية مدمجة للتحديثات المتفائلة من خلال ثلاث عمليات استدعاء لدورة الحياة: onMutate، ويُستدعى قبل عملية التغيير ويعيد كائن سياق؛ وonError، ويُستدعى عند الفشل ويتلقى السياق؛ وonSettled، ويُستدعى عند النجاح أو الفشل. صُممت هذه البنية خصيصًا للأنماط المتفائلة.
onMutate: مرحلة التحديث المتفائل
في onMutate، تنفذ ثلاث خطوات: أولًا، ألغِ أي استعلامات قيد التنفيذ للبيانات المتأثرة (await queryClient.cancelQueries({ queryKey }))، ثم احفظ نسخة من ذاكرة التخزين المؤقت الحالية (queryClient.getQueryData(queryKey))، وأخيرًا طبّق التحديث المتفائل على ذاكرة التخزين المؤقت (queryClient.setQueryData(queryKey, updater)). أعد النسخة المحفوظة كسياق.
onError: التراجع باستخدام السياق
يتلقى ردّ النداء onError الخطأ ومتغيرات عملية التغيير والسياق الذي أعاده onMutate. استخدم السياق للتراجع: queryClient.setQueryData(queryKey, context.previousData). يمثّل السياق حلقة الوصل بين النسخة المحفوظة في onMutate والتراجع في onError.
onSettled: إعادة الجلب للمزامنة
يُستدعى ردّ النداء onSettled بغض النظر عن النجاح أو الفشل. استخدمه لإعادة جلب الاستعلام ومزامنة الحالة مع الخادم: queryClient.invalidateQueries({ queryKey }). يضمن ذلك أن تتقارب حالتك في النهاية مع حقيقة الخادم بعد أي عملية تغيير، سواء نجحت العملية، إذ قد يكون الخادم قد حوّل البيانات، أم فشلت، بعد اكتمال التراجع.
التبديل المتفائل لقائمة المهام باستخدام React Query
مثال عملي: تبديل حالة إكمال مهمة. في onMutate، احفظ نسخة من قائمة المهام، ثم حدّث المهمة المحددة في ذاكرة التخزين المؤقت. في onError، استعد النسخة المحفوظة من السياق. وفي onSettled، أبطل استعلام المهام لإعادة جلبه. يرى المستخدم التبديل فورًا، بينما يتزامن الخادم في الخلفية.
التحديثات المتفائلة باستخدام Zustand
تُعد التحديثات المتفائلة في متجر Zustand مباشرة: أنشئ إجراءً updateItem(id, changes) يحدّث العنصر فورًا في المتجر، ثم يستدعي واجهة برمجة التطبيقات. إذا فشلت واجهة برمجة التطبيقات، فاستدعِ إجراءً آخر هو revertItem(id, previousState). تجعل تحديثات الحالة المتزامنة في Zustand الخطوة المتفائلة فورية.
استخدام Immer مع Zustand للتحديثات المعقدة
عند تحديث حالة Zustand المتداخلة بعمق بتفاؤل، استخدم produce من immer لإجراء تغييرات واضحة: set(produce(state => { state.items[id] = { ...state.items[id], ...changes } })). يتولى Immer تحديثات عدم القابلية للتغيير باستخدام صياغة قابلة للتغيير، مما يجعل تغييرات الحالة المتداخلة المعقدة مقروءة وآمنة.
خطاف React 19 useOptimistic
قدّم React 19 الخطاف المدمج useOptimistic(state, updateFn) للتحديثات المتفائلة ضمن Server Actions. const [optimisticState, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]). يؤدي استدعاء addOptimistic(newItem) إلى تحديث واجهة المستخدم فورًا أثناء تشغيل إجراء الخادم بشكل غير متزامن.
التراجع التلقائي في useOptimistic
يتولى useOptimistic التعامل مع التراجع تلقائيًا. عند اكتمال Server Action، سواء بنجاح أم بخطأ، يعيد React الحالة المتفائلة ويطبّق الحالة الفعلية من الخادم. لا تحتاج إلى كتابة منطق تراجع يدوي؛ إذ يدير React دورة حياة التحديث المتفائل أثناء عمل الإجراء ضمن حدود Suspense.
مقارنة الأساليب الثلاثة
تمنحك التحديثات المتفائلة اليدوية تحكمًا كاملًا، لكنها تتطلب تعليمات برمجية متكررة. يتكامل React Query onMutate/onError/onSettled مع ذاكرة التخزين المؤقت للاستعلامات من أجل المزامنة التلقائية. ويُعد useOptimistic الأبسط بالنسبة إلى Server Actions، لكنه يتطلب React 19 وبنية تعتمد على إجراءات الخادم. اختر الأسلوب بناءً على طبقة البيانات لديك: اليدوي للحالة المحلية البسيطة، وReact Query لواجهات REST API، وuseOptimistic لـ RSC/Server Actions.
اختيار النمط المناسب
ضع بنيتك المعمارية في الاعتبار عند اختيار نمط متفائل. إذا كنت تستخدم React Query في أنحاء تطبيقك، فسيكون نمط onMutate متسقًا ومدركًا لذاكرة التخزين المؤقت. وإذا كنت تستخدم Zustand للحالة العامة، فسيتوافق نمط الإجراءات معها طبيعيًا. أما إذا كنت تستخدم React 19 مع Server Actions، فسيكون useOptimistic هو الخيار الاصطلاحي. ومن الشائع والمقبول خلط الأنماط داخل التطبيق نفسه.
القيمة التي يعيدها React Query onMutate
ماذا ينبغي أن يعيد ردّ النداء onMutate في React Query لتمكين التراجع في onError؟
مراجعة الدرس: الأنماط المتفائلة
يستخدم useMutation في React Query onMutate لإلغاء الاستعلامات وحفظ نسخة وتطبيق التحديث المتفائل وإعادة السياق، ثم يستخدم onError لاستعادة النسخة من السياق، وonSettled لإبطال الاستعلام وإعادة جلبه. تطبّق التحديثات المتفائلة في Zustand إجراء الحالة فورًا، ثم تستدعي واجهة برمجة التطبيقات، وتعيد الحالة عند الفشل. يوفر useOptimistic في React 19 تراجعًا تلقائيًا ضمن Server Actions. اختر النمط الذي يلائم بنية طبقة البيانات لديك.
الأسئلة الشائعة
هل درس «أنماط التفاؤل مع React Query وZustand» مجاني؟
نعم — نص درس «أنماط التفاؤل مع React Query وZustand» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنماط التفاؤل مع React Query وZustand»؟
استخدم عمليات الاستدعاء onMutate وonError وonSettled في React Query وZustand لسير عمل منظم للواجهة المتفائلة تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «أنماط التفاؤل مع React Query وZustand»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما هي الواجهة المتفائلة ومتى تُستخدم
- تنفيذ التحديثات المتفائلة يدويًا
- التراجع عند الخطأ وحل التعارضات
- أنماط التفاؤل مع React Query وZustand