React Context لحالة السمة
أنشئ ThemeProvider يتيح السمة الحالية ودالة تبديلها لشجرة المكوّنات بأكملها
React Context لحالة السمة درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
إنشاء ThemeContext
ابدأ باستدعاء createContext() مع قيمة افتراضية تطابق بنية السياق لديك: const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {} }). لا تُستخدم القيمة الافتراضية إلا عندما يقرأ مكوّن ما السياق من دون Provider أب، وهذا يفيد في اختبار المكوّنات المعزولة.
مكوّن ThemeProvider
مكوّن ThemeProvider هو غلاف يحتوي على كل منطق السمة. يقرأ تفضيل النظام عند تركيبه، ويدير حالة theme، ويوفّر دالة toggleTheme، ويغلّف المكوّنات الأبناء داخل ThemeContext.Provider value={{ theme, toggleTheme }}. ضعه بالقرب من أعلى شجرة المكوّنات.
استهلاك السياق باستخدام useContext
يمكن لأي مكوّن تابع الوصول إلى السمة باستدعاء useContext(ThemeContext). يعيد هذا الاستدعاء قيمة السياق الحالية، بما في ذلك theme وtoggleTheme. يُعاد تصيير المكوّن تلقائيًا عند تغيّر السمة، لتظل متزامنة دائمًا من دون تمرير الخصائص عبر المكوّنات.
مزامنة data-theme مع DOM
تعتمد متغيرات CSS على سمة data-theme في العنصر الجذر. أضف داخل ThemeProvider تأثيرًا useEffect يُنفّذ كلما تغيّرت theme: document.documentElement.setAttribute('data-theme', theme). يربط هذا بسلاسة بين حالة React وطبقة CSS.
تخزين تجاوز المستخدم في localStorage
للحفاظ على اختيار المستخدم بعد إعادة تحميل الصفحات، اكتب القيمة في localStorage كلما تغيّرت السمة: localStorage.setItem('theme', theme). يمكنك تغليف هذا المنطق في خطاف مخصّص باسم useLocalStorage يعيد زوجًا شبيهًا بالحالة ويحفظ كل تحديث تلقائيًا.
تهيئة السمة من localStorage
عند تهيئة حالة السمة، اقرأ من localStorage أولًا: localStorage.getItem('theme'). إذا لم توجد قيمة مخزّنة، فاستخدم تفضيل النظام عبر window.matchMedia('(prefers-color-scheme: dark)').matches كخيار بديل. تُنفّذ هذه التهيئة مرة واحدة فقط عند التركيب.
ترتيب أولوية السمة
الترتيب الصحيح للأولوية من الأعلى إلى الأدنى هو: تفضيل المستخدم المخزّن في localStorage، ثم تفضيل نظام التشغيل، ثم قيمة افتراضية محددة مسبقًا في الشيفرة، وعادةً ما تكون السمة الفاتحة. يضمن هذا الترتيب أن تكون للمستخدم الكلمة الأخيرة دائمًا، مع احترام إعدادات نظام التشغيل إذا لم يختر المستخدم سمة صراحةً داخل التطبيق.
خطاف useTheme المساعد
إن استدعاء useContext(ThemeContext) مباشرةً في كل مكوّن يكشف تفاصيل التنفيذ. بدلًا من ذلك، صدّر خطافًا باسم useTheme: function useTheme() { return useContext(ThemeContext); }. يمكن للمكوّنات الآن استيراد useTheme واستدعائه من دون معرفة السياق الأساسي.
توفير دالة تبديل
تبدّل دالة toggleTheme بين light وdark: setTheme(prev => prev === 'light' ? 'dark' : 'light'). اعرضها من خلال السياق كي يتمكّن أي زر في أي موضع من الشجرة من تشغيلها. توجد الحالة في موضع واحد، بينما يُشارك منطق التبديل في جميع المواضع.
تخزين قيمة السياق مؤقتًا
يُعاد إنشاء كائن قيمة السياق في كل تصيير لـ ThemeProvider. لفّه داخل useMemo لمنع إعادة التصيير غير الضرورية لجميع مستهلكي السياق: const value = useMemo(() => ({ theme, toggleTheme }), [theme]). يُعد هذا تحسينًا شائعًا للأداء لدى موفّرات السياق.
اختبار ThemeProvider
في الاختبارات، غلّف عمليات التصيير بأداة مخصّصة باسم renderWithTheme تستخدم ThemeProvider كغلاف. يمكنك أيضًا إنشاء سياق وهمي بسيط للاختبار المعزول: ThemeContext.Provider value={{ theme: 'dark', toggleTheme: jest.fn() }}. يتيح لك هذا اختبار المكوّنات في حالة سمة محددة.
ترتيب أولوية السمة
ما ترتيب الأولوية الصحيح لتهيئة سمة التطبيق، من الأولوية الأعلى إلى الأدنى؟
مراجعة الدرس: React Context لحالة السمة
أنشئ ThemeContext وThemeProvider لإدارة حالة السمة، ومزامنتها مع localStorage، وتعيين data-theme في المستند. استخدم خطاف useTheme المساعد لاستهلاك السياق بطريقة واضحة. ترتيب الأولوية هو: التفضيل المخزّن، ثم تفضيل النظام، ثم القيمة الافتراضية.
الأسئلة الشائعة
هل درس «React Context لحالة السمة» مجاني؟
نعم — نص درس «React Context لحالة السمة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «React Context لحالة السمة»؟
أنشئ ThemeProvider يتيح السمة الحالية ودالة تبديلها لشجرة المكوّنات بأكملها تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «React Context لحالة السمة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- اكتشاف مخطط ألوان النظام
- متغيرات CSS لتبديل السمات
- React Context لحالة السمة
- حفظ السمة ومنع الوميض