Menu
flag Ar iconالعربيةdown icon

ما هي React؟ شرح مكتبة JavaScript لبناء الواجهات

React مكتبة JavaScript لبناء واجهات المستخدم من مكوّنات. تصف ما يجب أن تعرضه الشاشة للبيانات الحالية، وتُبقي React الصفحة متزامنة عندما تتغير تلك البيانات.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

React مكتبة JavaScript لبناء واجهات المستخدم من مكوّنات. تصف كيف يجب أن تبدو الشاشة للبيانات الحالية، وعندما تتغير البيانات تحدّث React الصفحة لتطابقها. React وReact JS وReactJS شيء واحد: مكتبة مفتوحة المصدر أُنشئت في Facebook (Meta حاليًا).

انقر الزرين. كل Counter يحتفظ برقمه الخاص، لأن كل واحد نسخة منفصلة من المكوّن ولها حالتها الخاصة. أضف سطرًا ثالثًا، <Counter label="Plums" />، فيظهر عدّاد جديد مستقل.

هذا المثال القصير يُظهر بالفعل الأفكار الثلاث التي بُنيت عليها React: المكوّنات (Counter وApp دوال تُرجع واجهة)، وJSX (الصيغة الشبيهة بـ HTML داخل return)، والحالة (count، قيمة تجعل React تعيد رسم المكوّن عندما تتغير).

المشكلة التي تحلها React

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

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

يسلّم ByHand فقرته إلى كود DOM عادي (التأثير لا يشغّل ذلك الكود إلا بعد أن تنشئ React الفقرة). يحتفظ بالرقم في متغير، ويجد كل عنصر بـ querySelector ويضبط نصه يدويًا. أما Declarative فيقول فقط «اعرض العدد، واعرض هل هو زوجي». احذف السطر في handleClick الذي يضبط .parity وانقر بضع مرات: الصف الأول يزعم الآن أن 3 عدد زوجي، بينما لا يمكن للصف الثاني أن يفقد التزامن، لأن النص يُحسب من count في كل عرض.

كيف تحدّث React الصفحة

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

افتح وحدة التحكم أسفل المعاينة واكتب بضعة أحرف. كل ضغطة مفتاح تسجّل عرضًا واحدًا بالقيمة الجديدة. يحتفظ حقل الإدخال بالتركيز وبموضع المؤشر، لأن React لم تلمس إلا نص الفقرة وقيمة الحقل، لا الصفحة كلها. تشرح صفحة العرض بالضبط متى يُعرض المكوّن من جديد.

المكوّنات وJSX والحالة في لمحة

المكوّنات دوال JavaScript تبدأ أسماؤها بحرف كبير. تُرجع ما يجب أن يظهر على الشاشة، وتستخدمها مثل وسوم HTML: <Counter />. الصفحة شجرة من المكوّنات، من صغيرة مثل زر إلى كبيرة مثل شاشة إعدادات كاملة. راجع المكوّنات.

JSX هي الصيغة التي تتيح لك كتابة الترميز داخل JavaScript. الأقواس المعقوصة تعيدك إلى JavaScript، فيعرض {count} قيمة ويحوّل {items.map(...)} مصفوفة إلى قائمة. تحوّل أداة بناء JSX إلى استدعاءات دوال عادية قبل أن يشغّلها المتصفح.

الحالة بيانات يتذكرها المكوّن بين مرات العرض. تنشئها بالخطاف useState، واستدعاء دالة الضبط الخاصة بها هو طريقتك لإخبار React بأن شيئًا تغيّر. تتدفق البيانات من الآباء إلى الأبناء عبر props، وهي وسائط المكوّن.

يستخدم هذا المثال كل ذلك: قائمة تُعرض من مصفوفة في الحالة، ونموذج يضيف إليها.

أضف مهمة فيتغير شيئان معًا: القائمة والعدد أسفلها. لم تطلب قط من العدد أن يتحدث. كلاهما يقرأ من tasks، فكلاهما يتبعها. غيّر المصفوفة الابتدائية إلى [] فتعرض القائمة "Nothing to do." بدلًا من ذلك.

ما ليست React

React مكتبة وليست إطار عمل كاملًا. تغطي المكوّنات والحالة وتحويلهما إلى واجهة، وتترك عمدًا عدة أشياء يحتاجها التطبيق الكامل:

  • التوجيه. لا توجد طريقة مدمجة لربط عناوين URL بالصفحات. React Router وموجّهات أطر العمل تسد هذه الفجوة.
  • جلب البيانات والعرض على الخادم. تمنحك React أدوات مثل التأثيرات وSuspense، لكنها لا تفرض رأيًا في مصدر البيانات ولا في كيفية عرض الصفحات على الخادم.
  • إعداد للبناء. المتصفحات لا تفهم JSX، لذا تحتاج إلى أداة مثل Vite لتحويلها.

تُبنى أطر العمل فوق React لتوفير هذه الأجزاء. يضيف Next.js ووضع إطار العمل في React Router التوجيه والعرض على الخادم وتحميل البيانات، ويوصي فريق React ببدء أي تطبيق كامل بأحدهما. أما لتطبيق يعمل في المتصفح أو للتعلم، فإن Vite مع React العادية نقطة بداية صغيرة وسريعة؛ راجع كيفية تثبيت React.

React مقابل React Native

React نفسها لا تصف إلا المكوّنات وكيف تتغير. ويحوّلها مُصيِّر منفصل إلى شيء يمكنك رؤيته. React DOM تعرض في صفحات الويب، وهي ما تستخدمه كل الأمثلة في هذا الموقع. React Native تعرض النوع نفسه من المكوّنات كعناصر عرض أصلية في iOS وAndroid، فتكتب <View> و<Text> بدلًا من <div> و<p>، ولا يوجد ملف HTML أو CSS. المكوّنات وprops والحالة والخطافات تعمل بالطريقة نفسها في الاثنتين، لذا ينتقل ما تتعلمه هنا مباشرة.

متى تتعلم React

تعلّم React بعد أساسيات JavaScript، لأن كل شيء في React هو JavaScript. قبل أن تبدأ ينبغي أن تكون مرتاحًا مع:

  • المتغيرات والدوال والدوال السهمية
  • المصفوفات وتابعيها map وfilter
  • الكائنات والتفكيك وصيغة النشر (...)
  • import وexport
  • الوعود وasync/await، لتحميل البيانات

إن بدت لك هذه مألوفة، فابدأ بـ JSX والمكوّنات، ثم props والحالة. تأتي التأثيرات والمراجع والسياق وأدوات الأداء لاحقًا، عندما يصبح بناء مكوّنات تفاعلية صغيرة أمرًا طبيعيًا.

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

فيمَ تُستخدم React؟

تُستخدم React لبناء واجهات مستخدم تفاعلية: تطبيقات الويب ولوحات التحكم والنماذج وتطبيقات الصفحة الواحدة وأجزاء من المواقع العادية. ومع React Native يبني نموذج المكوّنات نفسه تطبيقات iOS وAndroid.

هل React إطار عمل أم مكتبة؟

React مكتبة. تتولى المكوّنات والحالة والعرض، لكن ليس فيها موجّه مدمج ولا طبقة لجلب البيانات ولا إعداد للبناء. أُطر العمل مثل Next.js ووضع إطار العمل في React Router تضيف هذه الأجزاء فوق React.

هل React JS هي نفسها React؟

نعم. React وReact JS وReactJS ثلاثة أسماء للمكتبة نفسها. وجاءت «JS» لأن React مكتوبة بلغة JavaScript ولأجلها.

هل أحتاج إلى معرفة JavaScript قبل تعلم React؟

نعم. مكوّنات React دوال JavaScript، لذا ينبغي أن تكون مرتاحًا أولًا مع الدوال والمصفوفات (map وfilter) والكائنات والتفكيك والدوال السهمية والوحدات والوعود.

ما الفرق بين React وReact Native؟

تصف React الواجهات على شكل مكوّنات. تعرض React DOM هذه المكوّنات داخل صفحة ويب، وتعرضها React Native كعناصر عرض أصلية على الهاتف. المكوّنات وprops والحالة والخطافات تعمل بالطريقة نفسها في الحالتين.

رسم توضيحي للغات البرمجة في Coddy

تعلّم البرمجة مع Coddy

ابدأ الآن