Effect Pitfalls مزالق الـ Effect الشائعة

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

Effect Pitfalls مزالق الـ Effect الشائعة

تتركّز مزالق useEffect حول مصفوفة الاعتمادات: اعتماد ناقص يقرأ قيمة قديمة، واستدعاء setState داخل Effect يُحدِث عنه اعتماد يسبّب حلقة لا نهائية، واعتماد على كائن أو دالة يكون مرجعًا جديدًا كل مرة، ونسيان التنظيف يكدّس المستمعين. أدرك هذه الأصناف الأربعة يصبح معظم الـ Effects آمنًا، لأن جسم الـ Effect أخيرًا لا يفعل إلا ما يعد به اسمه.

المجموعةالتوجيه وإدارة الحالة
النوعنمط

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

📝 الصيغة

useEffect(() => {
  document.title = 'Current ' + count + ' times' // ① if you use count, declare it as a dependency
}, [count])                               // ② dependency array: re-run only when it changes

useEffect(() => {
  const id = setInterval(tick, 1000)
  return () => clearInterval(id)          // ③ clean up on unmount to avoid stacking
}, [])

القيمة المرجعة:لا قيمة مرجعة؛ إنها نمط برمجي وليست واجهة قابلة للاستدعاء.

▶ مثال

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

الناتج:

تتحدّث القائمة أثناء الكتابة، ولا يزيد عداد تنفيذ الـ Effect إلا عند تغيّر query؛ ويلخّص أدناه نتائج المزالق الكبرى الثلاث: اعتماد ناقص، وحلقة لا نهائية، واعتماد على كائن.

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

⚠️ تحذير تحديث الحالة داخل Effect بينما تلك الحالة نفسها اعتماد هو المصدر الأول للحلقات اللانهائية؛ فاسأل نفسك أولًا «هل يمكن اشتقاق هذه القيمة أثناء الرسم؟».
💡 نصيحة اعتمادات الكائنات والمصفوفات والدوال مراجع جديدة في كل رسم — غلّفها بـ useMemo/useCallback، أو اضغط الاعتماد إلى قيمة أولية.
ℹ️ ملاحظة في بيئة التطوير، يعيد React 18 في StrictMode تركيب كل Effect وفكّه وتركيبه عمدًا، مما يكشف لك التنظيفات الناقصة.
المزيد من الحالات قريباً.

📚 دروس ذات صلة

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

س لماذا يدور Effect الخاص بي إلى الأبد؟
ج setState داخل Effect يغيّر قيمة هي أيضًا اعتماد -> تتغير الحالة -> يُنفَّذ Effect مجددًا -> يعيد تعيين الحالة، وهكذا. أصلحه بإزالة ذلك الاعتماد، أو بضغط قائمة الاعتمادات، أو باشتقاق القيمة أثناء الرسم.
س ماذا ينبغي وضعُه في مصفوفة الاعتمادات تحديدًا؟
ج كل قيمة تفاعلية يقرأها Effect: props والحالة والمتغيّرات والدوال المعرّفة داخل المكوّن. وتذكّرك قاعدة exhaustive-deps في eslint بالتي تنساها.
س هل يعني المصفوفة الفارغة [] أنه يُنفَّذ مرة واحدة؟
ج تعني «مستقلاً عن أي قيمة»: يُنفَّذ مرة عند التركيب ويُنفَّذ التنظيف عند فكّ التركيب. وإن كان يقرأ حالةً داخليًا فسيبقى يرى القيمة الأولية — فخ الإغلاق.
Web-Tutorial.com

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

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

100%