اذهب إلى المحتوى

السؤال

نشر

ما الفرق بين الطريقتين

  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)
    }
  }

 

Recommended Posts

  • 0
نشر

كلاهما يؤديان نفس الغرض، لكن من خلال خطاف 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();
}, []);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...