Zen Eddin Allaham نشر 14 يوليو 2025 أرسل تقرير نشر 14 يوليو 2025 ما الفرق بين الطريقتين useEffect(() => { fetch('api') .then((res) => res.json()) .then((data) => setCategrouApi(data)) },[]) const fetchApi = async () => { try{ const res = await fetch('api') const data = res.json(); console.log(data) }catch(e){ console.log(e) } } const fetchApi = async () => { try{ const res = await fetch('api') const data = res.json(); console.log(data) }catch(e){ console.log(e) } } 1 اقتباس
0 Mustafa Suleiman نشر 14 يوليو 2025 أرسل تقرير نشر 14 يوليو 2025 كلاهما يؤديان نفس الغرض، لكن من خلال خطاف useEffect فستعمل دالة fetch تلقائيًا عند تحميل المكون بسبب مصفوفة الإعتماديات الفارغة [] بالتالي سيتم جلب البيانات في البداية في حال ذلك كان مطلوب، لكن يتم استخدام then وهي طريقة قديمة، الأفضل async-await وأيضًا لا يتم معالجة الأخطاء من خلال try-catch أما دالة async/await فهي مستقلة ولا تعمل إلا عند استدعائها بنفسك مثلاً عند النقر على زر، وتتبع النهج الحديث في التعامل مع العمليات الغير متزامنة وتعتمد على try-catch. وللعلم هناك خطأ في الكود حيث هنا const data = res.json() فـ res.json() هي عملية غير متزامنة وتعيد Promise، يجب أن تنتظرها باستخدام await لتضمن الحصول على البيانات الفعلية وليس الـ Promise نفسه. والحل الأفضل هو الجمع بين الطريقتين كالتالي: const fetchCategories = async () => { try { const res = await fetch('api/categories'); const data = await res.json(); setCategories(data); return data; } catch (error) { console.error('خطأ في جلب التصنيفات:', error); setError(error.message); return null; } finally { setLoading(false); } }; useEffect(() => { setLoading(true); fetchCategories(); }, []); اقتباس
0 Zen Eddin Allaham نشر 14 يوليو 2025 الكاتب أرسل تقرير نشر 14 يوليو 2025 انا استخدمت الطريقة القديمة لجلب API هل ستعمل بشكل كامل ام استخدم الطريقة الحديثة async await اقتباس
0 Mustafa Suleiman نشر 14 يوليو 2025 أرسل تقرير نشر 14 يوليو 2025 كلاهما سيعمل، الأفضل استخدام async await ومعالجة الأخطاء من خلال try-catch اقتباس
السؤال
Zen Eddin Allaham
ما الفرق بين الطريقتين
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.