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

السؤال

نشر

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

  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();
}, []);

 

  • 0
نشر

انا استخدمت الطريقة القديمة لجلب API هل ستعمل بشكل كامل ام استخدم الطريقة الحديثة async await

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...