تاريخ React – استعراض شامل وتحليل تقني

يوليو 26, 2025

1. البدايات: النشأة داخل Facebook

في عام 2011، واجه مهندسو Facebook تحديًا متزايدًا في صيانة واجهات المستخدم المعقدة والتفاعلية. تم تطوير مكتبة داخلية تُدعى BoltJS، ثم تغيّر اسمها إلى FaxJS، وأخيرًا استقر الاسم على React. تم إطلاق React كمكتبة مفتوحة المصدر رسميًا في مايو 2013. كان أول استخدام لها في Facebook Feed، ثم في Instagram عام 2012.

// الشكل الأولي لإنشاء عنصر في React بدون JSX
const element = React.createElement('h1', null, 'Hello, React!');

2. JSX و Virtual DOM: الثورة التفاعلية

React قدمت مفهوم JSX لدمج JavaScript مع شيفرة HTML بشكل أكثر وضوحًا، وأدخلت تقنية Virtual DOM لتقليل عدد العمليات على DOM الفعلي، مما حسن الأداء بشكل كبير خاصة في التطبيقات الكبيرة.

function Counter() {
  const [count, setCount] = React.useState(0);
  return (
    <div>
      <p>لقد ضغطت {count} مرة</p>
      <button onClick={() => setCount(count + 1)}>اضغطني</button>
    </div>
  );
}

JSX لم تكن مدعومة بشكل مباشر من المتصفح، لذا تُترجم باستخدام أدوات مثل Babel.

3. المكوّنات المعتمدة على الفئات (Class Components)

قبل ظهور Hooks، كانت React تعتمد على مكوّنات الفئات للتحكم في الحالة ودورات حياة المكوّن:

class Welcome extends React.Component {
  constructor(props) {
    super(props);
    this.state = { name: 'زائر' };
  }

  componentDidMount() {
    console.log('تم تركيب المكوّن');
  }

  render() {
    return <h2>مرحبًا، {this.state.name}</h2>;
  }
}

رغم قوتها، كانت مكوّنات الفئات تزداد تعقيدًا بمرور الوقت، مما دفع نحو البحث عن بديل أبسط وأكثر مرونة.

4. Hooks: نقلة نوعية في كتابة المكوّنات

تم تقديم React Hooks في الإصدار 16.8 عام 2019، لتسمح باستخدام الحالة والتأثيرات الجانبية في المكوّنات الوظيفية. من أشهرها:

  • useState لإدارة الحالة المحلية.
  • useEffect لتنفيذ منطق بعد التصيير.
  • useContext للوصول إلى السياق (Context).
function Clock() {
  const [time, setTime] = React.useState(new Date());

  React.useEffect(() => {
    const timer = setInterval(() => setTime(new Date()), 1000);
    return () => clearInterval(timer);
  }, []);

  return <p>الوقت الحالي: {time.toLocaleTimeString()}</p>;
}

5. React Fiber: إعادة كتابة جوهر React

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

6. Server-Side Rendering (SSR) ومكونات الخادم

منذ بداياتها، دعمت React التصيير على الخادم (SSR) باستخدام ReactDOMServer. لكن ظهرت لاحقًا React Server Components لتفصل بين منطق الخادم والعميل وتقلل التكرار وتحسن الأداء.

async function ProductServer() {
  const res = await fetch('https://api.example.com/products/1');
  const product = await res.json();
  return <div>المنتج: {product.name}</div>;
}

7. React 19: تحديثات موجهة لتجربة المطور

React 19 (ديسمبر 2024) جلب مزايا قوية مثل useFormStatus و Server Actions، لتبسيط إدارة النماذج وتحسين التفاعل مع الخادم:

function ContactForm() {
  const status = useFormStatus();
  return (
    <form action="/api/contact">
      <input name="email" required />
      <button disabled={status.pending}>إرسال</button>
    </form>
  );
}

8. التحسينات الذكية وحفظ الحالة خارج الشاشة

React الآن يدعم الاحتفاظ بالحالة حتى للمكوّنات غير المرئية في واجهة المستخدم، مثل Preserving Offscreen State، مما يحافظ على معلومات مثل scroll أو بيانات النموذج عند التنقل بين الصفحات.

🔍 خلاصة وتحليل نهائي

  • React بدأت كمكتبة بسيطة لحل مشاكل الواجهة المعقدة، وأصبحت إطارًا قويًا يدعم تطبيقات ضخمة.
  • التحولات من Class إلى Hooks، ومن DOM مباشر إلى Virtual DOM، ساهمت في جعل الكود أكثر وضوحًا وقابلية لإعادة الاستخدام.
  • التركيز المستقبلي على Server Components و React Compiler يفتح المجال لأداء غير مسبوق وتجربة تطوير أكثر استقرارًا.

المدونة

شرح مفصل لكل هوك في React

يوليو 01, 2025

🎣 شرح React Hooks وبأمثلة عملية 🧠 useState بيعمل إيه: بيضيف حالة داخلية (state) جوا أي مكون شغال بوظيفة. مثال عملي: import React, { useSta...

تعزيز PHP Enums باستخدام archtechx/enums

يوليو 01, 2025

تعزيز PHP enums باستخدام حزمة archtechx/enums من PHP&nbsp;8.1، ظهر نوع جديد اسمه &ldquo;enums&rdquo; بيخليك تعرف قيم ثابتة بأسماء مرمّزة زي statuses...

أهم تحديثات Laravel و PHP لكتابة كود أنظف وأسرع

أغسطس 17, 2025

Laravel Global Scopes: Automatic Query Filtering Eloquent الأهمية: فرض فلترة ثابتة على جميع استعلامات الموديل (مثل Soft Deletes) دون تكرا...

Laravel 12.19: استخدام Attributes لتنظيم الـ Query Builder

يوليو 07, 2025

Laravel 12.19: استخدام Attributes تنظّم Query Builder في Laravel 12.19، دلوقتي تقدر تستخدم Attribute اسمه #[UseEloquentBuilder] علشان تحدد Query Bu...

استخدام useCallback في React: الفوائد، القيود، والممارسات المثالية

يوليو 31, 2025

Hook useCallback في React يُستخدم لإنشاء نسخة ثابتة من دالة (callback) بحيث لا يُعاد إنشاؤها إلا إذا تغيرت الـ dependencies المحددة. الهدف الأساسي م...

إزاي OAuth بيشتغل

يونيو 29, 2025

إزاي OAuth بيشتغل؟ OAuth هو بروتوكول بيخلّي التطبيقات تقدر تدخل على بياناتك بطريقة آمنة من غير ما تدّيهم الباسورد بتاعك. زي مثلًا لو حبيت تطبيق ينشر...

The Ultimate Managed Hosting Platform