نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

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

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
العودة للتغريدات
مشكلةتم الحل

React Hook "useEffect" has a missing dependency: 'fetchData'. Infinite re-render loop in React

K
kamel
·١٦ يوليو ٢٠٢٦·3 مشاهدة
أقوم ببناء مكوّن (Component) في React يقوم بجلب بيانات المنتجات عند تحميل الصفحة باستخدام useEffect. المطلوب: تعريف دالة لجلب البيانات من الـ API وتنفيذها بمجرد تحميل المكوّن لأول مرة فقط. المشكلة الحاصلة: تشتعل الصفحة في الحلقة اللانهائية (Infinite Loop) من الـ Requests إلى الـ API، مع ظهور التحذير التالي في الـ Console: React Hook useEffect has a missing dependency: 'fetchData'. Either include it or remove the dependency array. (react-hooks/exhaustive-deps) عند إضافة fetchData إلى مصفوفة الاعتماديات [fetchData] في useEffect لإرضاء الـ Linter، تستمر الحلقة اللانهائية من إعادة التنسيق (Re-rendering)!
JavaScript
import React, { useState, useEffect } from 'react';

function ProductList() {
    const [products, setProducts] = useState([]);
    const [loading, setLoading] = useState(true);

    // دالة جلب البيانات معرّفة داخل المكوّن
    const fetchData = async () => {
        const response = await fetch('https://api.example.com/products');
        const data = await response.json();
        setProducts(data);
        setLoading(false);
    };

    useEffect(() => {
        fetchData(); 
        // إذا تركتها فارغة [] يظهر تحذير Linter
        // إذا أضفت [fetchData] تدخل الصفحة في Infinite Loop!
    }, []); 

    if (loading) return <p>Loading...</p>;

    return (
        <ul>
            {products.map(p => <li key={p.id}>{p.name}</li>)}
        </ul>
    );
}

export default ProductList;
مشاكل-reactأخطاء-useeffectمكتبة-react-jsبرمجة-front-endمشاكل-javascriptحل-أخطاء-react

التعليقات (2)

الحل المعتمد
abdelrahman
abdelrahmanمنذ 90 يوم
سبب المشكلة: في كل مرة يعاد فيها رسم المكوّن (Re-render)، يتم إنشاء نسخة جديدة بمرجع جديد (New Reference) من الدالة fetchData. عند وضع الدالة داخل مصفوفة الاعتماديات [fetchData]، يظن React أن الدالة تغيرت فيقوم بتشغيل useEffect من جديد، والتي بدورها تحدّث الحالة setProducts فتجبر المكوّن على إعادة الرسم... وهكذا إلى ما لا نهاية. الحل الصحيح : نقل الدالة داخل useEffect إذا كانت الدالة تُستخدم فقط داخل الـ Effect، ينبغي تعريفها داخله مباشرة لمنع إنشائها خارج النطاق:
JavaScript
useEffect(() => {
    // تعريف الدالة داخل الـ Effect مباشرة
    const fetchData = async () => {
        const response = await fetch('https://api.example.com/products');
        const data = await response.json();
        setProducts(data);
        setLoading(false);
    };

    fetchData();
}, []); // مصفوفة فارغة تعني التشغيل عند الـ Mount فقط
K
kamelمنذ 90 يوم
شكرا 🙏

سجّل دخولك لإضافة تعليق

تسجيل الدخول
نوفيل

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

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر