← المستوى 3 – الخبير

الدرس 6 من 10 ⏱ 90 دقيقة بريميوم

إعادة البناء الكبيرة: موقعك في React

أعد كتابة موقع المستوى 1 في React. نفس الموقع، للمرة الثالثة – هذه المرة كمحترف.

مهمتك

ستأخذ موقعك من المستويين 1–2 وتبنيه مجدداً في React. يبدو رجوعاً للخلف؟ ليس كذلك – إنه أفضل تدريب موجود: المحتوى والتصميم جاهزان عندك، فتركّز على التقنية الجديدة فقط. وفي النهاية سترى بوضوح لماذا يجد المحترفون الأمر مفيداً.

خطة إعادة البناء

  1. قسّم الموقع إلى components. خذ ورقة وقلماً (جدياً!) وارسم موقعك كصناديق: Header، Gallery، Quiz، Footer… كل صندوق = ملف واحد في src/.

  2. انقل HTML إلى الـ components. انسخ قطعة قطعة من ملفات .html القديمة إلى JSX. انتبه للفروق المألوفة: classclassName، كل component يرجع عنصر غلاف واحد. انسخ صورك إلى مجلد public/ في مشروع Vite – ثم المسارات مثل /images/team.jpg تعمل بلا تغيير.

  3. انقل CSS. انسخ محتوى style.css إلى src/App.css. يجب أن يعمل شبه بلا تغيير – CSS يبقى CSS.

  4. اسحب البيانات إلى arrays. البطاقات، النتائج، صور المعرض – كل ما يتكرر، حوّله إلى array من objects + .map()، كما تعلّمت في درس الـ components.

  5. أعد كتابة تعاويذ المستوى 2 كـ state. إليك جدول التحويل:

    المستوى 2 (JavaScript عادي)React
    getElementById + textContentstate + {value} في JSX
    addEventListener("click", ...)onClick={...}
    classList.toggle + CSS .hiddenstate منطقي + {condition && (...)}
    عداد بمتغيرuseState برقم

شاهد معي: الوضع الداكن على طريقة React

لنعد كتابة تعويذة معاً، لترى التحويل عملياً:

import { useState } from 'react';
import Header from './Header.jsx';
import Gallery from './Gallery.jsx';

function App() {
  const [dark, setDark] = useState(
    localStorage.getItem("mode") === "dark"
  );

  function toggleMode() {
    const newMode = !dark;
    setDark(newMode);
    localStorage.setItem("mode", newMode ? "dark" : "light");
  }

  return (
    <div className={dark ? "dark" : ""}>
      <Header onToggle={toggleMode} dark={dark} />
      <Gallery />
    </div>
  );
}

export default App;

وفي Header.jsx، الزر يستقبل دالة كـ prop:

function Header({ onToggle, dark }) {
  return (
    <header>
      <h1>My website</h1>
      <button onClick={onToggle}>{dark ? "☀️" : "🌙"}</button>
    </header>
  );
}

شيء أخير جديد: الـ prop يمكن أن يكون دالة أيضاً. App يملك الـ state ويعير طفله زراً لتبديله. هذا يسمى «الـ state يعيش في الأعلى»، وهو النمط الأشيع في React.

قائمة تحقق إعادة البناء

💡

التعثّر جزء من اللعبة. هذا الدرس ماراثون لا سباق – لا تتردد في تقسيمه على عدة أيام. عندما تعلق: الـ console (F12)، رسالة خطأ Vite، والمقارنة مع أمثلة الدروس السابقة. هكذا بالضبط يصحّح المحترف الأخطاء.

تحقق من نفسك: موقعك يعمل على localhost ويبدو (تقريباً) كما كان – لكن من الداخل مصنوع من components وبيانات وstate. جرّب الآن إضافة بطاقة واحدة إلى array البيانات وشاهد كم العمل قليل. ذلك هو سبب وجود React كله.

ما ستخرج به من هذا الدرس