انتقل إلى محتوى الدرس
الدرس 23
دورة ReactJS

التعامل مع القوائم المنسدلة وخانات الاختيار في ReactHandling Select Menus Checkboxes and Radio Buttons

تحكّم في القوائم المنسدلة وخانات الاختيار المنطقية والمصفوفات المتعددة وأزرار الانتقاء وحقول الأرقام في React عبر خاصيتي value وchecked بأسلوب تصريحي نظيف.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

في صفحات HTML التقليدية كان تحديد خيار افتراضي داخل القائمة المنسدلة يتطلب وضع سمة selected على أحد عناصر <option> الفرعية. استبدلت React هذا التشتت بواجهة تحكم مركزية نظيفة على العنصر الأب <select> مباشرة.

مرر value={selectedValue} مع onChange={(e) => setSelectedValue(e.target.value)} إلى وسم <select>، وستتكفل المكتبة بإبراز الخيار المطابق تلقائياً.

HTML
function LevelFilter() {
  const [level, setLevel] = useState('intermediate');
  return (
    <select value={level}
      onChange={(e) => setLevel(e.target.value)}>
      <option value="beginner">Beginner</option>
      <option value="intermediate">Intermediate</option>
      <option value="advanced">Advanced</option>
    </select>
  );
}

تمثل خانة الاختيار المنفردة — مثل الموافقة على الشروط أو إظهار المنتجات المتوفرة فقط — قيمة منطقية صريحة (true أو false) وليست نصاً؛ لذلك نربط حالتها بخاصية checked بدلاً من value.

وداخل معالج التغيير اقرأ e.target.checked دائماً؛ فقراءة e.target.value خطأ شائع يعيد النص الثابت "on" سواء كانت الخانة محددة أم غير محددة.

عندما يُتاح للمستخدم اختيار عنصر أو أكثر من قائمة متعددة — كاختيار المهارات البرمجية أو قنوات التنبيه — نخزن المعرّفات المختارة داخل مصفوفة حالة مثل useState(['jsx']).

تحسب كل خانة حالتها عبر skills.includes(item.id)، وعند النقر نحدّث المصفوفة بنقاء دون تعديل مباشر: نضيف المعرّف بمعامل الانتشار إذا حُددت الخانة، أو نستبعده بدالة filter() إذا أُلغي تحديدها.

مخطط يوضح ربط ثلاثة عناصر اختيار في React: القائمة المنسدلة بخاصية value وخانة الاختيار بخاصية checked ومجموعة أزرار الانتقاء بالمقارنة المنطقية
HTML
function toggleSkill(id, isChecked) {
  setSelected((prev) =>
    isChecked
      ? [...prev, id]
      : prev.filter((item) => item !== id)
  );
}

تمثل أزرار الانتقاء (Radio Buttons) اختياراً حصرياً واحداً يلغي تلقائياً بقية الخيارات، مثل اختيار دورة الاشتراك الشهري أو السنوي. نخزن الخيار المختار كسلسلة نصية واحدة في الحالة.

امنح جميع الأزرار في المجموعة نفس خاصية name لدعم التنقل بأسهم لوحة المفاتيح، وحدد لكل زر قيمته الخاصة مع فحص التطابق checked={cycle === optionValue} وتحديث الحالة عند التغيير.

HTML
function BillingSelector() {
  const [plan, setPlan] = useState('monthly');
  return (
    <label>
      <input type="radio" name="plan" value="monthly"
        checked={plan === 'monthly'}
        onChange={(e) => setPlan(e.target.value)} />
      Monthly
    </label>
  );
}

حتى عندما يحمل الحقل النوع type="number" أو شريط تمرير type="range"، فإن المتصفح يعيد قيمة e.target.value دائماً كسلسلة نصية! فجمع seats + 1 حين تكون القيمة النصية "3" ينتج دمجاً نصياً "31" بدلاً من الرقم 4.

حوّل القيمة صراحةً داخل معالج التغيير عبر دالة Number(e.target.value) قبل إجراء أي حسابات للأسعار أو الكميات.

HTML
function TeamCalculator() {
  const [seats, setSeats] = useState(5);
  const sync = (e) => setSeats(Number(e.target.value));
  return (
    <div>
      <input type="range" min={1} max={20}
        value={seats} onChange={sync} />
      <p>{seats} seats = ${seats * 15}/mo</p>
    </div>
  );
}

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

عنصر النموذجخاصية ربط الحالةتعبير قراءة التغيير في onChange
القائمة المنسدلة selectخاصية value={selectedOption}تحديث القيمة عبر e.target.value
خانة الاختيار المفردةخاصية checked={isAgreed}قراءة المنطق عبر e.target.checked
مجموعة خانات متعددةفحص checked={list.includes(id)}إضافة بالانتشار أو حذف بدالة filter
أزرار radio وشريط rangeمقارنة checked أو تمرير valueقراءة النص أو تحويله بدالة Number
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس التحكم في قوائم select عبر خاصية value على العنصر الأب، وربط خانات الاختيار المفردة والمتعددة عبر خاصية checked، ومزامنة أزرار الانتقاء الحصرية وتحويل مدخلات الأرقام بأمان. الخطوة التالية: انتقل الآن إلى الدرس رقم 24 «إدارة النماذج متعددة الحقول والتحقق من المدخلات» لمواصلة البناء التراكمي المتدرج في مسار React الحديث.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Controlled Select القائمة المنسدلة المحكومة
عنصر قائمة منسدلة يتحدد خياره النشط بتمرير خاصيتي value وonChange للعنصر الأب مباشرة.
للمراجعة
02 Checked Prop خاصية التحديد checked
الخاصية المنطقية المعتمدة في JSX للتحكم في حالة تفعيل خانة الاختيار أو زر الانتقاء.
للمراجعة
03 Radio Group مجموعة أزرار الانتقاء
مجموعة أزرار تشترك في سمة الاسم وتسمح باختيار قيمة واحدة فقط تطابق متغير الحالة.
للمراجعة
04 Numeric Coercion التحويل الرقمي الصريح
تغليف القيمة النصية القادمة من الحقل بدالة Number لضمان إجراء عمليات حسابية صحيحة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 RTL RTL
Right-to-Left
اتجاه تخطيط الواجهات من اليمين إلى اليسار للغة العربية والذي يدار غالباً بقوائم الإعدادات.
للمراجعة
02 LTR LTR
Left-to-Right
اتجاه العرض من اليسار إلى اليمين المعتمد للغة الإنجليزية والشفرات البرمجية.
للمراجعة
03 UI UI
User Interface
عناصر التحكم البصرية كالقوائم والخانات وأشرطة التمرير التي يضبط المستخدم عبرها الحالة.
للمراجعة
04 HTML HTML
HyperText Markup Language
لغة توصيف المستندات التي توحّد React طريقة التحكم في عناصر نماذجها القياسية.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح مثال SkillPicker في محرر التجريب وأضف زراً يمرر جميع معرّفات القائمة لدالة الحالة لتحديدها دفعة واحدة.

  2. افتح مثال TeamCalculator وأضف زراً يزيد مقعداً واحداً وتأكد من صحته الحسابية بفضل تخزين القيمة كرقم.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

كيف تحدد الخيار النشط حالياً داخل قائمة select محكومة في React؟

بتمرير خاصية value={stateVar} مباشرة إلى وسم select الأب بدلاً من وضع سمة selected على الخيارات.

02

أي خاصية في كائن الحدث تحمل القيمة المنطقية لخانة الاختيار داخل معالج onChange؟

تعيد خاصية e.target.checked قيمة منطقية صواب أو خطأ بينما تعيد value النص الثابت "on".

03

قراءة e.target.value لخانة اختيار قياسية بلا سمة value تعيد النص "on" حتى عند إلغاء تحديد الخانة.

صواب؛ ولذلك يجب الاعتماد دائماً على e.target.checked مع خانات الاختيار.

04

ما الطريقة النقية الصحيحة لإزالة معرّف عنصر أُلغي تحديده من مصفوفة خانات الاختيار المتعددة؟

تنشئ دالة filter مصفوفة جديدة تستبعد المعرّف المطلوب دون تعديل المصفوفة الأصلية.

05

كيف تُحسب قيمة خاصية checked لكل زر داخل مجموعة أزرار انتقاء radio محكومة؟

بمقارنة متغير الحالة الحالي بقيمة ذلك الزر تحديداً مثل checked={plan === "annual"}.

06

توحيد خاصية name بين أزرار الانتقاء المترابطة يمكّن المستخدم من التنقل بينها بأسهم لوحة المفاتيح.

صواب؛ تعتمد إتاحة لوحة المفاتيح القياسية لأزرار الانتقاء على اشتراكها في نفس خاصية name.

07

ما نوع البيانات الذي تعيده الخاصية e.target.value من حقول number وrange في المتصفح؟

تعيد خاصية القيمة في عناصر DOM سلسلة نصية دائماً ما لم تُحوّل برمجياً.

08

إذا خُزنت القيمة النصية "4" دون تحويل رقمي، فما نتيجة التعبير count + 1 في JavaScript؟

يقوم معامل الجمع بدمج النصوص عند وجود طرف نصي فتكون النتيجة "41" بدلاً من 5.

09

يمكن إدارة مجموعة خانات اختيار متعددة عبر مصفوفة في useState تفحص العضوية بدالة includes وتحدثها بالانتشار والتصفية.

صواب؛ المصفوفة غير القابلة للتعديل المباشر هي النمط القياسي لإدارة الخيارات المتعددة في React.

10

أي ثنائي من عناصر HTML الدلالية يُعد الأنسب لتغليف مجموعة خانات اختيار أو أزرار انتقاء لدعم قارئات الشاشة؟

يوفر العنصران fieldset وlegend تجميعاً دلالياً واضحاً يقرأ عنوان المجموعة للمستخدمين المكفوفين.