Dependency Array مصفوفة الاعتماديات
آخر تحديث: 2026-11-03
Dependency Array مصفوفة الاعتماديات
تخبر مصفوفة الاعتماديات الأثر لمن يعمل: مصفوفة فارغة تشغّله مرة واحدة، وإدراج متغيّرات تجعله يُعاد كلما تغيّر أيّ منها. والنموذج الذهني أن يبقى الأثر متزامناً مع اعتمادياته — وكل قيمة تفاعلية تُقرأ داخل الأثر ينبغي أن تُدرَج فيها بأمانة. والمصفوفة ليست مقبض أداء تضبطه يدوياً؛ إنها إعلان عمّا يعتمد عليه الأثر، ولا يستطيع الـ linter أن يفحص هذا الإعلان إلا إن رأيت كل قيمة.
| المجموعة | الآثار الجانبية والأداء |
|---|---|
| النوع | نمط |
ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.
📝 الصيغة
useEffect(fn) // يُنفَّذ بعد كل عرض
useEffect(fn, []) // يُنفَّذ مرة واحدة بعد التركيب
useEffect(fn, [a]) // يُنفَّذ عند تغيّر a (بمقارنة Object.is)
القيمة المرجعة:لا قيمة معادة؛ فهذه المدخلات تصف نمط برمجة لا دالة.
▶ مثال
المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.
الناتج:
الضغط على مستخدم مختلف يعرض «Loading…» أولاً ثم الاسم المطابق؛ وحتى النقرات السريعة لن تخلط البيانات، لأن المؤقّت القديم يُنظَّف.
💡 النقاط الأساسية
💡 نصيحة تُقارَن الاعتماديات عبر Object.is: أما الكائن أو الدالة فيحصل على مرجع جديد في كل عرض، أي أن الاعتمادية تتغيّر فعلياً في كل مرة.
⚠️ تحذير إغفال اعتمادية عمداً يقلّل عدد مرات التشغيل ثمن إغلاق بائت — ففكّر ملياً قبل إسكات تحذير exhaustive-deps.
ℹ️ ملاحظة الحدس القائل بأن «[] تعمل مرة واحدة عند التركيب» خاطئ في كثير من الأحيان: ما إن يستخدم الأثر قيمة قابلة للتغيّر، تنتمي تلك القيمة إلى مصفوفة الاعتماديات.
🏷️ المزيد من الآثار والأداء
💡 حالات ذات صلة
المزيد من الحالات قريباً.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
س لماذا يُعيد تشغيل الأثر دائماً حين تكون في الاعتماديات كائن؟
ج كل عرض ينتج مرجعاً جديداً، فتفشل Object.is. استخدم useMemo لتثبيت المرجع، أو خزّن قيمة أولية (primitive) كاعتمادية.
س لماذا تعمل [] مرتين في وضع التطوير؟
ج يستدعي StrictMode الآثار مرتين عمداً لكشف الآثار الجانبية التي تفتقر إلى تنظيف؛ وفي الإنتاج تعمل مرة واحدة.
س كيف أنفّذ منطقاً عند تغيّر prop معيّن؟
ج أدرجه في مصفوفة الاعتماديات واكتب المنطق داخل الأثر؛ وحين تحتاج تخطّي التشغيل الأول، استخدم ref لتسجيل هل رُكّب المكوّن.