0Pricing
React Academy · درس

مرحلة العرض وتثبيت DOM

تتبّع دورة العرض في React من تقييم JSX مرورًا بالمطابقة إلى خطوة الرسم في المتصفح

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

نظرة عامة على دورة عمل React

تتكون دورة عمل React من مرحلتين رئيسيتين: مرحلة التصيير ومرحلة الالتزام. أثناء مرحلة التصيير، يستدعي React دوال المكوّنات ويبني تمثيلًا افتراضيًا لواجهة المستخدم (شجرة Fiber). وأثناء مرحلة الالتزام، يطبّق React التغييرات الموجودة في شجرة Fiber على DOM الفعلي.

يمكن مقاطعة مرحلة التصيير

في Concurrent Mode في React 18، يمكن إيقاف مرحلة التصيير مؤقتًا أو مقاطعتها أو إعادة تشغيلها. قد يستدعي React دالة المكوّن عدة مرات قبل تنفيذ أي عملية التزام. ولهذا يجب أن تكون دوال المكوّنات نقية؛ فلا يمكنها إحداث آثار جانبية، لأن الدالة قد تُشغّل أكثر من مرة أثناء تحديث مرئي واحد.

مرحلة الالتزام متزامنة دائمًا

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

المراحل الفرعية الثلاث للالتزام

تتكون مرحلة الالتزام من ثلاث مراحل فرعية: ما قبل التغيير (يُنفّذ فيها getSnapshotBeforeUpdate في مكوّنات الأصناف لقراءة قيم DOM قبل التغييرات)، والتغيير (يُدرج React عقد DOM ويحدّثها ويزيلها)، والتخطيط (تُنفّذ فيها التأثيرات المتزامنة، وتحديدًا useLayoutEffect وcomponentDidMount/componentDidUpdate في مكوّنات الأصناف).

التأثيرات الجانبية اللاحقة: useEffect

يُعد useEffect تأثيرًا جانبيًا لاحقًا، أي إنه لا يُنفّذ أثناء مرحلة الالتزام. بعد اكتمال مرحلة الالتزام وانتهاء المتصفح من عرض الصفحة، يجدول React التأثيرات الجانبية اللاحقة بشكل غير متزامن. وتُنفّذ هذه التأثيرات بعد أن تتاح للمتصفح فرصة عرض DOM المحدّث على الشاشة.

توقيت عرض المتصفح

يعرض المتصفح الصفحة بين مرحلة التخطيط، حيث يُنفّذ useLayoutEffect، ومرحلة التأثيرات الجانبية اللاحقة، حيث يُنفّذ useEffect. وهذا هو الفرق الأساسي في التوقيت: يُنفّذ useLayoutEffect قبل العرض، بينما يُنفّذ useEffect بعده. وتكتسب هذه التفرقة أهمية كبيرة بالنسبة إلى التأثيرات التي تغيّر المظهر المرئي.

لماذا قد يتسبب useEffect في تحديث مرئي مزدوج

إذا قرأ useEffect DOM وحدّث الحالة (مثل قياس عنصر وتعيين حالة للحجم)، فسيعيد React التصيير ثم ينفّذ الالتزام مرة أخرى. يعرض المتصفح الصفحة مرتين: مرة بالحجم الأولي ومرة بالحجم المصحح. وقد يرى المستخدمون وميضًا بالحجم الخاطئ قبل ظهور التصحيح.

شجرة Fiber

ينشئ React داخليًا شجرة من عُقد fiber، عُقدة واحدة لكل مثيل مكوّن. تحتوي كل عُقدة fiber على حالة المكوّن وتأثيراته ومخرجاته. أثناء مرحلة التصيير، ينشئ React شجرة fiber جديدة قيد العمل. وأثناء مرحلة commit، تصبح الشجرة قيد العمل هي الشجرة الحالية، ويُعاد استخدام الشجرة القديمة.

الاستدعاء المزدوج في Strict Mode

يستدعي React عمدًا دوال المكوّنات والتأثيرات مرتين في بيئة التطوير للمساعدة على اكتشاف الآثار الجانبية. يُركّب كل من useLayoutEffect وuseEffect، ثم يُفكّك، ثم يُركّب من جديد. لا يحدث هذا الاستدعاء المزدوج في بيئة الإنتاج. والغرض منه كشف الأخطاء التي لا تُنظَّف فيها التأثيرات بشكل صحيح.

لماذا يجب أن تكون دوال المكوّنات نقية

نظرًا إلى إمكانية مقاطعة مرحلة التصيير وإعادة تشغيلها، يجب أن تنتج دوال المكوّنات المخرجات نفسها للمدخلات نفسها، من دون آثار جانبية. إن إجراء عمليات التغيير أو إنشاء الاشتراكات أو استدعاء API داخل جسم الدالة، وليس داخل التأثيرات، سيؤدي إلى تنفيذها مرات أكثر من المتوقع في Concurrent Mode، مما يسبب أخطاء.

قراءة DOM في التصيير مقابل التأثيرات

لا تقرأ خصائص DOM مباشرةً داخل جسم دالة المكوّن. فقد لا يكون DOM موجودًا بعد، كما في التصيير على الخادم، أو قد تكون قيمه قديمة أثناء إعادة التصيير. احرص دائمًا على قراءة DOM داخل useLayoutEffect للقراءات السابقة للرسم، أو داخل useEffect للقراءات اللاحقة للرسم، حيث يُضمن أن يكون DOM محدثًا.

المراحل الفرعية لمرحلة commit في React

في أي مرحلة فرعية من مرحلة commit في React يُنفَّذ useLayoutEffect؟

مراجعة الدرس: مرحلة التصيير وتطبيق DOM

تبني مرحلة التصيير في React شجرة fiber، ويمكن مقاطعتها؛ أما مرحلة commit فتطبّق تغييرات DOM وتكون متزامنة دائمًا. وتتكوّن مرحلة commit من ثلاث مراحل فرعية: ما قبل التعديل، والتعديل، والتخطيط. يُنفَّذ useLayoutEffect في مرحلة التخطيط قبل الرسم. ويُنفَّذ useEffect كتأثير سلبي بعد الرسم.

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

هل درس «مرحلة العرض وتثبيت DOM» مجاني؟

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

ماذا ستتعلم في «مرحلة العرض وتثبيت DOM»؟

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

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

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

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

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

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

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

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

  1. مرحلة العرض وتثبيت DOM
  2. متى يعمل useLayoutEffect مقارنةً بـ useEffect
  3. قياس عناصر DOM باستخدام useLayoutEffect
  4. تجنّب اضطراب التخطيط والوميض المرئي
← العودة إلى React Academy