React: مقدمة إلى React

React هي مكتبة JavaScript مخصصة لإنشاء واجهات المستخدم. إذا قارنا صفحة الويب بمنزل، فإن HTML تمثل الجدران المبنية من الطوب، وCSS تمثل التصميم الداخلي، وJavaScript تمثل أنظمة الكهرباء والسباكة؛ فإن React هي نظام تجميع جاهز — فهي تتيح لك تصميم كل غرفة (مكون) على حدة ثم تجميعها معًا لتشكيل مبنى كامل.


1. ما ستتعلمه



2. قصة حقيقية لمطور واجهة المستخدم

(1) المشكلة: صفحة واحدة، 30,000 سطر من jQuery

تعمل أليس كمطورة واجهة مستخدم في شركة متوسطة الحجم متخصصة في التجارة الإلكترونية. وتمتلك الشركة لوحة تحكم إدارية تم تطويرها باستخدام jQuery على مدار ثلاث سنوات، وتضم أكثر من 30,000 سطر من التعليمات البرمجية.

▶ مثال: مقدمة إلى React

JAVASCRIPT
// A typical product list page — jQuery code
function updateProductList(category) {
  // Manual DOM operation
  $('#product-list').empty()
  $('#loading-spinner').show()
  
  $.get('/api/products?category=' + category, function(data) {
    $('#loading-spinner').hide()
    data.forEach(function(product) {
      // Concatenate HTML strings line by line
      var html = '<div class="product-card">' +
        '<h3>' + product.name + '</h3>' +
        '<p>' + product.price + '</p>' +
        '<button onclick="addToCart(' + product.id + ')">Add to Cart</button>' +
        '</div>'
      $('#product-list').append(html)
    })
  })
}

المشكلة في هذه الصفحة هي:

(2) نهج React: نهج إعلاني + قائم على المكونات

إعادة كتابة نفس المنطق باستخدام React:

JSX
function ProductList({ category }) {
  const [products, setProducts] = React.useState([])
  const [loading, setLoading] = React.useState(true)

  React.useEffect(() => {
    fetch('/api/products?category=' + category)
      .then(res => res.json())
      .then(data => {
        setProducts(data)
        setLoading(false)
      })
  }, [category])

  if (loading) return <Spinner />
  
  return (
    <div className="product-grid">
      {products.map(product => (
        <ProductCard key={product.id} product={product} />
      ))}
    </div>
  )
}
▶ جرّب الكود

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



3. المفاهيم الأساسية في React

(1) البرمجة التصريحية مقابل البرمجة الأمرية

البعد الأسلوب الإمبراطوري (jQuery) الأسلوب التصريحي (React)
التركيز كيفية التنفيذ (عمليات DOM خطوة بخطوة) ما يجب فعله (وصف الحالة النهائية)
أسلوب الكتابة البرمجية خطوة بخطوة الإعلان الوصفي
إدارة الحالة الحالة اليدوية + التحديث اليدوي لـ DOM الحالة المُربوطة تلقائيًا بواجهة المستخدم
صعوبة تصحيح الأخطاء يتطلب تتبع كل عملية في DOM يتطلب فقط مراقبة تغييرات الحالة
JAVASCRIPT
// Imperative: tell the browser what to do at each step
const div = document.createElement('div')
div.className = 'alert'
div.textContent = 'Hello'
document.body.appendChild(div)

// Declarative: tell React what result you want
function Alert({ message }) {
  return <div className="alert">{message}</div>
}
// React automatically creates and updates the DOM

(2) DOM الافتراضي

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

100%
graph TB
    A[State changes] --> B[Create a new virtual DOM tree]
    B --> C[Diff A Comparison of Old and New Virtual Environments DOM]
    C --> D[Compute minimum update operations]
    D --> E[Batch update real DOM]
    E --> F[Page update complete]
    
    style A fill:#ff6b6b,color:#fff
    style C fill:#4ecdc4,color:#fff
    style E fill:#45b7d1,color:#fff
المفهوم DOM الحقيقي DOM الافتراضي
الجوهر كائنات المتصفح الأصلية كائنات جافا سكريبت العادية
تكلفة الإنشاء عالية (تتطلب تخطيط المتصفح) منخفضة جدًّا (عمليات جافا سكريبت بحتة)
طريقة التحديث التشغيل المباشر، يؤدي إلى إعادة التدفق/إعادة الرسم التحديث الدفعي بعد المقارنة
دقة التحديث عملية فردية الحد الأدنى للتحديث الدفعي

(3) التطوير القائم على المكونات

تتمثل الفكرة الأساسية وراء React في تقسيم الصفحة إلى مكونات مستقلة وقابلة لإعادة الاستخدام، بحيث يكون كل مكون مسؤولاً فقط عن المنطقة المحددة الخاصة به.

المفهوم القياس الشرح
المكون مكعب ليغو كل مكون هو وحدة وظيفية مستقلة
الخصائص لون/حجم الكتلة المعلمات التي يتم تمريرها من المكون الأصلي إلى المكون الفرعي
الحالة حالة الكتلة (جديدة/قديمة) البيانات التي يديرها المكون داخليًّا
شجرة المكونات نموذج ليغو مُجمَّع مكونات متداخلة لتشكيل صفحة
JSX
// Component-based: page broken into independent components
function Page() {
  return (
    <div>
      <Header />        {/* Header navigation */}
      <Sidebar />       {/* Sidebar */}
      <MainContent />   {/* Main content area */}
      <Footer />        {/* Footer copyright */}
    </div>
  )
}
▶ جرّب الكود

4. React مقارنةً بالأطر الشائعة الأخرى

البعد React Vue Angular
المطور Meta (Facebook) يو يوشي (فرد) Google
تاريخ الإصدار الأول 2013 2014 2010
النوع مكتبة واجهة المستخدم إطار عمل تدريجي إطار عمل متكامل الميزات
بناء جملة القوالب JSX (HTML مدمج في JavaScript) قوالب HTML + التوجيهات TypeScript + الزخارف
تدفق البيانات أحادي الاتجاه (من أعلى إلى أسفل) ربط ثنائي الاتجاه (نموذج V) ربط ثنائي الاتجاه
إدارة الحالة حلول المجتمع (Redux/Zustand) Pinia/Vuex الرسمي RxJS + Services الرسمي
منحنى التعلم متوسط (يتطلب فهم JSX + Hooks) منخفض (سهل الاستخدام مع القوالب) مرتفع (TypeScript + حقن التبعيات)
حل SSR Next.js Nuxt Angular Universal
حالات الاستخدام تطبيقات SPAs واسعة النطاق، وتطبيقات الهواتف المحمولة (React Native) المشاريع الصغيرة والمتوسطة الحجم، والنماذج الأولية السريعة تطبيقات المؤسسات واسعة النطاق
GitHub ⭐ 230 ألف+ 220 ألف+ 100 ألف+
سوق العمل (الصين) مرتفع (بشكل أساسي في المدن من الدرجة الأولى) مرتفع (بشكل أساسي في الشركات الصغيرة والمتوسطة) معتدل (الشركات الأجنبية/شركات التكنولوجيا الكبرى)

ملخص: يُعد React مناسبًا للمشاريع التي تتطلب تحكمًا عاليًا، وإمكانية إعادة استخدام عالية للمكونات، ودعمًا عبر الأنظمة الأساسية (الويب + الأجهزة المحمولة). أما Vue فهو أسهل في البدء به ومناسب للتكرار السريع. ويُعد Angular مناسبًا للفرق الكبيرة على مستوى المؤسسات.



5. نظرة عامة على منظومة React

React ليس إطار عمل «شاملًا»، بل هو مكتبة واجهة مستخدم مرنة. وهو يعتمد على النظام البيئي للمجتمع لتوفير ميزات مثل التوجيه وإدارة الحالة وأدوات البناء.

الحقل الأدوات الأساسية الوصف
أدوات البناء Vite (موصى به) / Create React App هيكل المشروع وخادم التطوير
التوجيه React Router v6 / TanStack Router التنقل بين الصفحات وإدارة عناوين URL
إدارة الحالات الحالات / Redux Toolkit / واجهة برمجة تطبيقات السياق إدارة البيانات العامة
استرجاع البيانات TanStack Query (React Query) / SWR التخزين المؤقت للبيانات والمزامنة من جانب الخادم
تصميم Tailwind CSS / CSS Modules / styled-components تصميم المكونات
الاختبار Vitest + React Testing Library / Playwright اختبار الوحدات واختبار E2E
SSR/SSG Next.js العرض من جانب الخادم والتوليد الثابت
الأجهزة المحمولة React Native تطوير تطبيقات الأجهزة المحمولة الأصلية باستخدام React
الرسوم المتحركة Framer Motion / React Spring الرسوم المتحركة والانتقالات في واجهة المستخدم
مكتبات المكونات Ant Design / MUI / Shadcn/ui مكونات واجهة المستخدم الجاهزة للاستخدام
100%
graph LR
    A[React] --> B[Build: Vite]
    A --> C[Routing: React Router]
    A --> D[Status: Zustand/Redux]
    A --> E[Data: TanStack Query]
    A --> F[Style: Tailwind/CSS Modules]
    A --> G[Test: Vitest + RTL]
    A --> H[SSR: Next.js]
    A --> I[Mobile: React Native]
    
    style A fill:#61dafb,color:#000
    style H fill:#000,color:#fff
    style I fill:#61dafb,color:#000


6. مثال كامل: إنشاء زر «إعجاب» بسيط باستخدام React

JSX
// ============================================
// Example:use  React Build a "Like" Button
// Features:Demonstrating Declarative Programming + Component-based + Core Concepts of State Management
// ============================================

import React from 'react'
import { createRoot } from 'react-dom/client'

// 1. Define a "Like" button component
function LikeButton() {
  // Usage useState Manage Like Status
  const [liked, setLiked] = React.useState(false)
  const [count, setCount] = React.useState(0)

  // Handling Click Events
  function handleClick() {
    if (liked) {
      setLiked(false)
      setCount(count - 1)
    } else {
      setLiked(true)
      setCount(count + 1)
    }
  }

  // Declarative UI:Render different appearances based on state
  return (
    <button
      onClick={handleClick}
      style={{
        padding: '10px 20px',
        fontSize: '16px',
        backgroundColor: liked ? '#ff4757' : '#f1f2f6',
        color: liked ? '#fff' : '#333',
        border: 'none',
        borderRadius: '5px',
        cursor: 'pointer'
      }}
    >
      {liked ? '❤️ Liked' : '🤍 Like'} ({count})
    </button>
  )
}

// 2. Add components to the page
function App() {
  return (
    <div style={{ textAlign: 'center', padding: '50px' }}>
      <h1>React Examples of Likes</h1>
      <p>Click the button to experience declarative programming UI:Just keep an eye on the status,No action required DOM</p>
      <LikeButton />
      <LikeButton /> {/* Component Reusability!*/}
    </div>
  )
}

// 3. Render to page
const root = createRoot(document.getElementById('root'))
root.render(<App />)

ما الذي يوضحه هذا المثال؟

  • التعريفي: نكتفي بوصف «الشكل الذي يجب أن يبدو عليه الزر عند تغير حالة الإعجاب»، ويقوم React تلقائيًا بتحديث DOM
  • قائم على المكونات: LikeButton هو مكون مستقل يمكن إعادة استخدامه عدة مرات
  • إدارة الحالة: يتم تتبع liked وcount تلقائيًا بواسطة React؛ ولا يلزم إجراء أي تعديل يدوي على DOM

▶ المثال 2: تصور شجرة مكونات React

JSX
// ============================================
// Example:use  React The component tree displays the page structure
// Features:Simulate the component tree of a blog homepage,Demonstrating a Component-Based Approach
// ============================================

// Leaf Component:Article Card
function ArticleCard({ title, excerpt }) {
  return (
    <div style={{ border: '1px solid #eee', borderRadius: '8px', padding: '12px', marginBottom: '12px' }}>
      <h3 style={{ margin: '0 0 8px 0' }}>{title}</h3>
      <p style={{ color: '#666', margin: 0, fontSize: '14px' }}>{excerpt}</p>
    </div>
  )
}

// Composite Components:List of Articles
function ArticleList({ articles }) {
  return (
    <div>
      <h2>Latest Articles</h2>
      {articles.map(article => (
        <ArticleCard key={article.id} title={article.title} excerpt={article.excerpt} />
      ))}
    </div>
  )
}

// Composite Components:Sidebar
function Sidebar() {
  return (
    <div style={{ backgroundColor: '#fafafa', padding: '16px', borderRadius: '8px' }}>
      <h3>Categories</h3>
      <ul style={{ listStyle: 'none', padding: 0 }}>
        <li>React Tutorial (12)</li>
        <li>TypeScript (8)</li>
        <li>Node.js (5)</li>
      </ul>
    </div>
  )
}

// Root Component:Blog Home
function BlogHome() {
  const articles = [
    { id: 1, title: 'React Getting Started Guide', excerpt: 'Study React Core Concepts and Best Practices...' },
    { id: 2, title: 'Understanding the Virtual DOM', excerpt: 'Virtual DOM How to Improve React Application Performance...' },
    { id: 3, title: 'Component Design Patterns', excerpt: 'Master React Techniques for Combining and Reusing Components...' }
  ]

  return (
    <div style={{ maxWidth: '960px', margin: '0 auto', padding: '20px' }}>
      <header style={{ textAlign: 'center', marginBottom: '24px' }}>
        <h1>📝 My Tech Blog</h1>
        <nav>
          <a href="#" style={{ margin: '0 12px' }}>Home</a>
          <a href="#" style={{ margin: '0 12px' }}>About</a>
          <a href="#" style={{ margin: '0 12px' }}>Contact</a>
        </nav>
      </header>
      <div style={{ display: 'grid', gridTemplateColumns: '2fr 1fr', gap: '24px' }}>
        <ArticleList articles={articles} />
        <Sidebar />
      </div>
      <footer style={{ textAlign: 'center', marginTop: '24px', color: '#999', fontSize: '13px' }}>
        <p>© 2026 web-tutorial.com</p>
      </footer>
    </div>
  )
}

// Component tree Structure:
// BlogHome
// ├── header (Navigation Bar)
// └── div.grid
//     ├── ArticleList
//     │   ├── ArticleCard × 3
//     └── Sidebar
//         └── Category List


❓ أسئلة شائعة

س هل React إطار عمل أم مكتبة؟
ج يُصنف React رسميًا على أنه «مكتبة واجهة مستخدم»، وليس إطار عمل متكامل. فهو يتعامل فقط مع «طبقة العرض»؛ أما الميزات مثل التوجيه وإدارة الحالة وطلبات HTTP، فتتطلب استخدام مكتبات طورتها مجتمع المطورين. وهذا أيضًا ما يجعل React مرنًا للغاية — فأنت حر في اختيار الأدوات التي تريد إقرانها به.
س ما الذي يجب أن أتعلمه قبل دراسة React؟
ج تحتاج إلى فهم أساسي لـ JavaScript (ES6+: الدوال السهمية، التعيين التفكيكي، استيراد وتصدير الوحدات النمطية، Promises، و async/await). إذا لم تكن تعرف لغة TypeScript بعد، فيمكنك تعلم JavaScript أولاً ثم الانتقال إلى TypeScript، أو يمكنك تعلم TypeScript مباشرةً (سيتناول الدرس 23 من هذا البرنامج التعليمي React + TypeScript بالتفصيل). كما أن الفهم الأساسي لـ HTML و CSS ضروري أيضًا.
س هل يجب أن أختار React 18 أم React 19؟
ج يستند هذا البرنامج التعليمي إلى React 18.3 (الإصدار المستقر الحالي ذو الدعم طويل الأمد (LTS)). في المرحلة 5، سنستعرض الميزات الجديدة في React 19 (مثل هوك use() ومكونات الخادم والإجراءات). بالنسبة لبيئات الإنتاج، نوصي بالبدء باستخدام React 18 والترقية بمجرد نضوج منظومة React 19.
س هل يجب عليّ استخدام Vite أم Create React App (CRA) لإنشاء مشروع React؟
ج نوصي باستخدام Vite. لم يعد CRA يخضع للصيانة بشكل فعلي (لم تصدر أي تحديثات رئيسية منذ عام 2023)، كما أن Vite يتفوق بكثير على CRA من حيث سرعة بدء التشغيل (<1 ثانية مقابل 10–30 ثانية في CRA) وسرعة البناء. ابتداءً من الدرس 2، سنستخدم Vite طوال الدورة التدريبية.
س هل أصبح React قديمًا الآن؟ هل يجب عليّ تعلم Next.js بدلاً منه؟
ج لا على الإطلاق. لا يزال React هو المكتبة الأكثر شيوعًا في مجال الواجهة الأمامية، حيث حصل على أكثر من 230 ألف ⭐ على GitHub وأكثر من 40 مليون عملية تنزيل أسبوعية على npm. تم بناء Next.js على أساس React، لذا إذا لم تفهم المفاهيم الأساسية لـ React (المكونات، وHooks، وإدارة الحالة)، فسيكون تعلم Next.js مباشرةً أمرًا صعبًا للغاية. أوصي بتعلم أساسيات React أولاً، ثم الانتقال إلى Next.js (ستغطي المرحلة 5 من هذا البرنامج التعليمي هذا الموضوع).

📖 ملخص


📝 تمارين

  1. سؤال أساسي (مستوى الصعوبة: ⭐): انتقل إلى موقع react.dev، وابحث عن قسم «Learn React» في الصفحة الرئيسية، وتصفح الصفحات الثلاث الأولى من الدروس التعليمية، واكتب المفاهيم الثلاثة التي ترى أنها الأكثر أهمية.
  2. سؤال للتفكير (مستوى الصعوبة: ⭐): اشرح بعباراتك الخاصة الفرق بين «البرمجة التصريحية» و«البرمجة الأمرية»، وقدم مثالاً من الحياة اليومية (لا يقتصر على البرمجة).
  3. سؤال المقارنة (مستوى الصعوبة: ⭐⭐): إذا أردت إنشاء موقع مدونة، فأيهما تعتقد أنه الأنسب: React أم Vue؟ اذكر سببين على الأقل لدعم اختيارك.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%