Object & Array State حالة الكائنات والمصفوفات

آخر تحديث: 2026-11-03

Object & Array State حالة الكائنات والمصفوفات

يجب استبدال الحالة بكائن جديد أو مصفوفة جديدة قبل أن يلاحظ React أي تحديث: استخدم معامل النشر للكتابة فوق حقل في الكائنات، واستخدم النشر أو map أو filter لبناء مصفوفة جديدة للقوائم. أما التعديل في المكان فيترك المرجع كما هو، فلا يرى React أي تغيير ولا تتحدّث الواجهة. والتحديث غير القابل للتعديل قاعدة يخوضها كل مطوّر React مراراً.

المجموعةالعرض والحالة
النوعنمط
منذ الإصدارReact 16.8

ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.

📝 الصيغة

setUser({ ...user, name: 'New name' })       // كائن: وسّع ثم استبدل القيمة
setList([...list, newItem])               // مصفوفة: وسّع وأضف في النهاية
setList(list.filter((x) => x.id !== id))  // مصفوفة: استخدم filter للحذف

القيمة المرجعة:لا قيمة معادة — مجرد اصطلاح برمجي ونموذج ذهني.

▶ مثال

المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.

الناتج:

يُعرض الاسم «Alice» والوسم «React»؛ الضغط على زر إعادة التسمية يحوّل الاسم إلى «Bob»، والضغط على زر إضافة وسم يضيف وسم «Hooks» في كل مرة — وكل تحديث يتم بإنشاء كائن جديد.

💡 النقاط الأساسية

⚠️ تحذير ‏user.name = 'x' أو user.tags.push(...) لا يُطلق إعادة عرض: المرجع يبقى كما هو، فيظن React أن شيئاً لم يتغيّر.
💡 نصيحة انشر الكائنات المتداخلة طبقة بطبقة: setUser({ ...u, addr: { ...u.addr, city: 'Shanghai' } })؛ فالنشر في الطبقة الخارجية وحدها لا يكفي.
ℹ️ ملاحظة اجعل البنية مسطّحة والحالات مستقلة، فذلك يزيل كثيراً من الشيفرة المتكرّرة التي تنتج عن نشر كائنات جديدة طبقة بطبقة.
المزيد من الحالات قريباً.

📚 دروس ذات صلة

❓ الأسئلة الشائعة

س لماذا لا تتحدّث الصفحة عند تغيير حالة كائن؟
ج يقارن React المرجع القديم بالجديد عبر Object.is: التعديل في المكان يبقي المرجع كما هو، فتُحسب الحالة غير متغيّرة. يجب إنشاء كائن جديد معامل النشر وتمريره إلى setState.
س كيف أحدّث حالة كائن متداخل بشكل صحيح؟
ج انشر من المستوى الذي تغيّر حتى المستوى الأعلى: setUser({ ...user, addr: { ...user.addr, city: 'Shanghai' } })، مع إبقاء كل المراجع غير الممسوكة كما هي.
س كيف أضيف عناصر وأزيلها من مصفوفة الحالة؟
ج أضف بـ [...list, item] أو في المقدمة بـ [item, ...list]؛ وأزل بـ filter((x) => x.id !== id). وكلاهما يعيد مصفوفة جديدة.
Web-Tutorial.com

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

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

100%