ما هي صياغة JSX وكيف يفهمها المتصفح؟
| المصطلح التقني | المفهوم البرمجي في ريأكت | كيف يراه المتصفح في الإنتاج النهائي |
|---|---|---|
| JSX | صياغة هجينة تدمج وسم الهيكل مع منطق جافا سكريبت في سطر واحد | كائن برمي عادي من نوع Object لا يحتوي على أي وسوم HTML حقيقية |
| Babel | المترجم والمحول البرمجي المسؤول عن تحويل الأكواد الحديثة | دالة جافا سكريبت قياسية مستدعاة تُسمى React.createElement لبناء العنصر |
| HTML | لغة توصيف هيكلية نصية بحتة يفهمها المتصفح بشكل طبيعي | واجهة مستخدم مرندرة ومحقونة ديناميكياً داخل عنصر الجذر root |
عندما تفتح ملف App.jsx لأول مرة، ستلاحظ شيئاً غريباً جداً قد يصيبك بالذهول؛ ستجد كوداً يشبه الـ HTML مكتوباً ومدمجاً في قلب دالة جافا سكريبت! في ديرتنا البرمجية القديمة، كان هذا يعتبر "خطيئة هندسية"، حيث تعلمت دائماً فصل الـ HTML في ملف والـ JavaScript في ملف آخر تماماً.
هذه الصياغة الهجينة والمبتكرة هي قلب ريأكت النابض، وتُسمى JSX.
كلمة JSX هي اختصار لـ (JavaScript XML). وهي ليست لغة برمجة جديدة، وليست كود HTML حقيقي؛ بل هي مجرد "امتداد صياغي" (Syntax Extension) للغة جافا سكريبت. تسمح لك JSX بكتابة بنية وهيكل واجهة المستخدم (UI) بنفس شكل الـ HTML المألوف لديك، ولكن مع الاستفادة الكاملة من القوة البرمجية الفائقة لـ JavaScript (مثل الحلقات التكرارية، الشروط، والمتغيرات) داخل نفس الكتلة البرمجية.
الحقيقة الصادمة هنا: المتصفحات (مثل كروم وفايرفوكس) لا تفهم ولا تقرأ سطر كود واحد من الـ JSX! لو قمت بإرسال ملف يحتوي على JSX للمتصفح مباشرة، سيرمى لك خطأ في سطر الأوامر فوراً. إذاً، كيف يعمل الموقع؟ خلف الكواليس، وفي أجزاء من الثانية أثناء حفظك للكود، تتدخل أداة البناء الحديثة (مثل Vite) وتستدعي مترجماً برمجياً عبقرياً يُدعى Babel. يقوم Babel بأخذ كل سطر يشبه الـ HTML كتبته أنت، ويقوم بتحويله وترجمته إلى دوال جافا سكريبت عادية وقياسية تُسمى React.createElement(). هذا الكود الصافي المعالج هو ما يذهب للمتصفح في النهاية.
دعنا نرى كيف يرى مهندس البرمجيات الكود، وكيف يقوم المترجم Babel بتفكيكه ليتحول إلى جافا سكريبت صافية يفهمها الكمبيوتر:
| 1 | const element = <h1 className="title">مرحباً بك في منصة نوفيل</h1>; |
| 2 |
| 1 | // هذا هو الكود الحقيقي الذي يفهمه المتصفح ويتحول في الذاكرة إلى كائن Virtual DOM خفيف |
| 2 | const element = React.createElement( |
| 3 | 'h1', |
| 4 | { className: 'title' }, |
| 5 | 'مرحباً بك في منصة نوفيل' |
| 6 | ); |