أنا شغالة على صفحة في React بطلب فيها بيانات من API خارجي باستعمال fetch جوه useEffect أول ما الصفحة تفتح.
المطلوب:
جلب البيانات وعرضها في الـ State أول ما تخلص.
المشكلة اللي مقابلاني:
لو المستخدم دخل الصفحة والـ API أخد ثانية أو ثانيتين، والمستخدم قرر يخرج من الصفحة فوراً أو يتنقل لصفحة تانية قبل ما الطلب يخلص، الـ Console بيمتلي تحذيرات بالشكل ده:
Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
المشكلة دي بتخلي أداء الأبلكيشن يسوء مع الوقت وبيحصل استهلاك عالي جداً للذاكرة (Memory Leak).
import { useState, useEffect } from 'react';
function UserProfile({ userId }) {
const [user, setUser] = useState(null);
useEffect(() => {
// السطر المشتبه فيه: دالة غير متزامنة بتتنفذ حتى لو المكون اتدمر (Unmounted)
fetch(`https://api.example.com/users/${userId}`)
.then(res => res.json())
.then(data => {
// لو المكون مش موجود في الشاشة حالياً، السطر ده هيضرب التحذير!
setUser(data);
});
}, [userId]);
return <div>{user ? user.name : 'جاري التحميل...'}</div>;
}
التعليقات (1)
سجّل دخولك لإضافة تعليق
تسجيل الدخول