React Academy · درس

حفظ السمة ومنع الوميض

احفظ تفضيل السمة في localStorage وأدرج نصًا حاجبًا لضبط السمة قبل تحميل React

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

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

مشكلة وميض السمة الخاطئة

عند تحميل الصفحة، يجب على React تنزيل JavaScript وتحليله وتنفيذه قبل أن يتمكّن من قراءة localStorage وتطبيق السمة الصحيحة. خلال هذه الفترة، يعرض المتصفح الصفحة باستخدام الأنماط الافتراضية. إذا كان المستخدم يفضّل الوضع الداكن وكانت القيمة الافتراضية هي الوضع الفاتح، فسيظهر له وميض أبيض قصير قبل تصحيح السمة.

حل السكربت الحاجب

يكمن الحل في وضع سكربت مضمن داخل document head يُنفّذ بشكل متزامن قبل أي شيفرة أخرى. يقرأ هذا السكربت localStorage فورًا ويعيّن data-theme في document.documentElement. وبما أنه سكربت حاجب، يطبّق المتصفح السمة قبل رسم أي محتوى.

سبب الحاجة إلى الحجب

تُنفّذ السكربتات غير المتزامنة أو المؤجلة بعد تحليل HTML، وربما بعد الرسم الأول. وهذا يُفقد الحل هدفه بالكامل. يجب ألا يحتوي السكربت المضمن الحاجب على سمتي async أو defer، وألا يُحمّل من ملف خارجي. كما يجب أن يكون صغيرًا لتقليل تكلفة الأداء.

محتوى السكربت المضمن

السكربت الحاجب بسيط: اقرأ localStorage.getItem('theme')، وافحص window.matchMedia('(prefers-color-scheme: dark)').matches كخيار بديل، ثم استدعِ document.documentElement.setAttribute('data-theme', theme). لفّه داخل try-catch تحسبًا لعدم توفر localStorage في وضع التصفح الخاص.

التنفيذ في Next.js

في Next.js، استخدم مكوّن Script من next/script مع strategy="beforeInteractive" داخل _document.js. تحقن استراتيجية beforeInteractive السكربت في HTML الصفحة قبل تشغيل أي JavaScript خاص بالصفحة، محققةً السلوك الحاجب نفسه ضمن مسار إنشاء Next.js.

التنفيذ في Vite وCRA

في مشروع Vite أو Create React App، عدّل index.html مباشرةً وضع وسم السكربت المضمن داخل head قبل أي سكربتات أخرى. بما أن index.html هو نقطة دخول المتصفح، يُنفّذ السكربت قبل بدء React. اجعله موجزًا بحيث يقل حجمه عن 100 بايت.

حل SSR باستخدام ملف تعريف الارتباط أو الرأس

في التطبيق المعروض من الخادم، يمكن للخادم قراءة السمة من ملف تعريف ارتباط مُرسل مع الطلب. ثم يعيّن الخادم data-theme في HTML المُنشأ قبل إرساله إلى المتصفح. يتجنب هذا أي وميض من جهة العميل، لأن السمة الصحيحة تكون موجودة منذ أول بايت من HTML.

التدفق الكامل لمنع الوميض

التدفق الكامل هو: ينزّل المتصفح HTML، ويصادف المحلّل سكربتًا مضمنًا حاجبًا، ويقرأ السكربت localStorage ويعيّن data-theme، ثم يواصل المحلّل عمله، وتُرسم الصفحة بالسمة الصحيحة، ويجري React عملية hydration ويلتقط السمة نفسها من localStorage. يرى المستخدم سمة واحدة متسقة منذ البداية.

اختبار منع الوميض

للتحقق من نجاح الإصلاح، افتح Chrome DevTools، وانتقل إلى علامة التبويب Network، واضبط سرعة الاتصال على Slow 3G. أعد تحميل الصفحة. إذا رأيت تغيّرًا في السمة أثناء التحميل، فهذا يعني أن الوميض لم يُمنع. عند وجود السكربت الحاجب، يجب أن يُظهر الرسم الأول السمة الصحيحة حتى على الاتصالات البطيئة.

خطر عدم تطابق hydration

إذا كانت الحالة الأولية في React مضبوطة افتراضيًا على السمة الفاتحة، بينما عيّن السكربت الحاجب السمة الداكنة قبل hydration، فقد يصدر React تحذيرًا بشأن عدم تطابق hydration. تجنب ذلك بتهيئة حالة سمة React من خلال قراءة localStorage أيضًا أثناء التصيير الأولي، لضمان تطابق HTML الذي يصيّره React مع حالة DOM التي عيّنها السكربت الحاجب.

الوميض في Storybook وبيئات الاختبار

لا تحمّل Storybook وبيئات الاختبار ملف index.html الخاص بك، ولذلك لا يُنفّذ السكربت الحاجب. وفّر مزخرفًا أو إعداد اختبار يطبّق سمة data-theme افتراضية في تلك البيئات. يمنع هذا التناقضات المرئية المربكة عند تطوير المكوّنات بشكل معزول.

تقنية منع الوميض

ما نوع السكربت الذي يجب استخدامه في رأس المستند لمنع وميض السمة الخاطئة؟

مراجعة الدرس: حفظ السمة ومنع الوميض

امنع وميض السمة الخاطئة بحقن سكربت مضمن حاجب صغير في رأس المستند، يقرأ localStorage ويعيّن data-theme قبل أي رسم. في Next.js استخدم strategy="beforeInteractive"، وفي Vite/CRA أضفه مباشرةً إلى index.html. ويمكن لتطبيقات SSR قراءة ملف تعريف ارتباط لتعيين السمة من جهة الخادم.

البدء مجانًا

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

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

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

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

هل درس «حفظ السمة ومنع الوميض» مجاني؟

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

ماذا ستتعلم في «حفظ السمة ومنع الوميض»؟

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

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

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

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

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

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

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

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

  1. اكتشاف مخطط ألوان النظام
  2. متغيرات CSS لتبديل السمات
  3. React Context لحالة السمة
  4. حفظ السمة ومنع الوميض
← العودة إلى React Academy