React Academy · درس

المحددات ومنع إعادة التصيير غير الضرورية

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

الدرس 2 من 413 خطوة

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

مرحبًا

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

مشكلة selector الافتراضي

يؤدي استدعاء خطاف المخزن من دون selector إلى إرجاع كائن المخزن بالكامل. وسيُعاد تصيير المكوّن عند كل تغيير في المخزن، حتى عند تغيّر حالة غير مرتبطة به
// Bad: re-renders on every store change
const store = useAppStore();
return <p>{store.user.name}</p>;

استخدام selector

مرّر دالة selector إلى خطاف المخزن. ولن يُعاد تصيير المكوّن إلا عند تغيّر القيمة التي تُرجعها الدالة
// Good: re-renders only when user.name changes
const name = useAppStore(s => s.user.name);
return <p>{name}</p>;

التحقق من تساوي المراجع

تستخدم Zustand المساواة الصارمة (===) بشكل افتراضي. وإذا أعاد selector كائنًا أو مصفوفة جديدة عند كل استدعاء، فسيُعاد تصيير المكوّن حتى عندما يكون المحتوى متماثلًا
// Creates a new object every time — always re-renders!
const info = useStore(s => ({ id: s.id, name: s.name }));

الإصلاح باستخدام المساواة السطحية

استورد `shallow` من zustand ومرّره بوصفه دالة المساواة لتجنب إعادة التصيير عندما تكون محتويات الكائن متماثلة
import { shallow } from 'zustand/shallow';

const info = useAppStore(
  s => ({ id: s.id, name: s.name }),
  shallow // compare by content, not reference
);

اختيار قيم متعددة

استخدم نمط المساواة السطحية لاختيار قيم متعددة في وقت واحد من دون التسبب في عمليات إعادة تصيير غير ضرورية
const { items, loading } = useCartStore(
  s => ({ items: s.items, loading: s.loading }),
  shallow
);

مراجع الإجراءات المستقرة

تمتلك الإجراءات، وهي دوال في Zustand، مراجع مستقرة؛ فلا تتغير عند تحديث الحالة. ويمكنك اختيارها من دون shallow، ولن تتسبب في إعادة التصيير
// Actions are always stable — no shallow needed
const addToCart = useCartStore(s => s.addToCart);

مساعد useShallow ‏(Zustand v5+)

يوفّر Zustand v5 أداة useShallow التي تغلّف selector تلقائيًا بالمساواة السطحية، مما يجعل التعليمات البرمجية أوضح
import { useShallow } from 'zustand/react/shallow';

const { items, loading } = useCartStore(
  useShallow(s => ({ items: s.items, loading: s.loading }))
);

دمج selectors

اشتق القيم المحسوبة داخل selectors لتجنب تخزين الحالة المشتقة في المخزن. واحسب الإجماليات أو القوائم التي تمت تصفيتها أو السلاسل المنسقة داخل selector
const totalPrice = useCartStore(
  s => s.items.reduce((sum, item) => sum + item.price, 0)
);

تحليل عمليات إعادة التصيير في Zustand

استخدم React DevTools Profiler للتحقق من عمل selectors. بعد إضافة عنصر غير مرتبط إلى المخزن، تحقق من أن المكوّن الذي يستخدم selector الاسم فقط لا يظهر في المخطط اللهبي لعملية الالتزام

تحقق سريع

لماذا تحتاج إلى استخدام المساواة السطحية عندما يُرجع selector في Zustand كائنًا؟

مراجعة

استخدم دائمًا selectors محددة. واستخدم المساواة السطحية عند اختيار قيم متعددة في صورة كائن. واشتق القيم المحسوبة داخل selectors. وتمتلك الإجراءات مراجع مستقرة ولا تحتاج إلى shallow

التالي

الدرس التالي: **حفظ الحالة باستخدام البرمجية الوسيطة Persist** — ستزامن حالة Zustand مع localStorage باستخدام البرمجية الوسيطة persist
البدء مجانًا

تعلم React مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
88
الدروس
324

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

هل درس «المحددات ومنع إعادة التصيير غير الضرورية» مجاني؟

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

ماذا ستتعلم في «المحددات ومنع إعادة التصيير غير الضرورية»؟

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

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

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

كم من الوقت يستغرق درس «المحددات ومنع إعادة التصيير غير الضرورية»؟

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

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

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

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

  1. إنشاء أول متجر Zustand لك
  2. المحددات ومنع إعادة التصيير غير الضرورية
  3. استمرارية الحالة باستخدام Persist Middleware
  4. أدوات Zustand للمطورين واختبار المتاجر
← العودة إلى React Academy