useFetch: دالة Composable للبيانات غير المتزامنة
مراجع data وloading وerror، والجلب عند التركيب، ودالة refetch، وتنظيف AbortController
useFetch: دالة Composable للبيانات غير المتزامنة درس مجاني في Vue Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Vue Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Vue Academy 4 دروس في المجموع.
هدف useFetch
يتكرر جلب البيانات غير المتزامن في كل مكان، بما في ذلك مؤشرات التحميل ومعالجة الأخطاء وتنفيذ الطلب نفسه. تجمع useFetch كل ذلك في دالة مركبة واحدة قابلة لإعادة الاستخدام، وتعيد data وloading وerror.
المراجع التفاعلية الثلاثة
ابدأ بثلاثة refs تصف حالة أي طلب غير متزامن.
import { ref } from "vue";
function useFetch(url) {
const data = ref(null);
const loading = ref(false);
const error = ref(null);
}روتين الجلب
اكتب دالة غير متزامنة تغيّر قيمة loading، وتنفّذ الطلب، وتحفظ النتيجة. سنحسّن معالجة الأخطاء بعد ذلك.
async function execute() {
loading.value = true;
const res = await fetch(url);
data.value = await res.json();
loading.value = false;
}try / catch / finally
غلّف الطلب بحيث تُحفظ الأخطاء في error، وتُعاد قيمة loading دائمًا إلى حالتها الأصلية، سواء نجح الطلب أم فشل، داخل finally.
async function execute() {
loading.value = true;
error.value = null;
try {
const res = await fetch(url);
if (!res.ok) throw new Error("HTTP " + res.status);
data.value = await res.json();
} catch (e) {
error.value = e;
} finally {
loading.value = false;
}
}الجلب في onMounted
ابدأ الطلب عند تركيب المكوّن حتى تُحمّل البيانات تلقائيًا.
import { onMounted } from "vue";
onMounted(execute);دالة refetch
اعرض execute باسم refetch حتى يتمكن المستهلكون من إعادة التحميل عند الطلب، بعد تعديل أو عند الضغط على زر إعادة المحاولة مثلًا.
return { data, loading, error, refetch: execute };AbortController للتنظيف
إذا أُزيل المكوّن أثناء تنفيذ الطلب، فألغِ عملية الجلب لتجنب تعديل الحالة في مكوّن لم يعد موجودًا. أنشئ AbortController ومرّر إشارته.
const controller = new AbortController();
const res = await fetch(url, { signal: controller.signal });الإلغاء عند إزالة المكوّن
ألغِ الطلب الجاري في onUnmounted. وتجاهل خطأ الإلغاء الناتج في catch.
import { onUnmounted } from "vue";
onUnmounted(() => controller.abort());useFetch كاملةً
بعد جمع الأجزاء، تتولى الدالة المركبة التحميل والأخطاء وإعادة الجلب والتنظيف في وحدة واحدة منظمة.
function useFetch(url) {
const data = ref(null);
const loading = ref(false);
const error = ref(null);
const controller = new AbortController();
async function execute() {
loading.value = true; error.value = null;
try {
const res = await fetch(url, { signal: controller.signal });
data.value = await res.json();
} catch (e) {
if (e.name !== "AbortError") error.value = e;
} finally {
loading.value = false;
}
}
onMounted(execute);
onUnmounted(() => controller.abort());
return { data, loading, error, refetch: execute };
}استخدامها في مكوّن
يعرض المستهلكون المحتوى بناءً على refs الثلاثة: مؤشر تحميل أثناء التحميل، ورسالة خطأ عند الفشل، والبيانات في الحالات الأخرى.
const { data, loading, error } = useFetch("/api/posts");نمط القالب
فرّع العرض بناءً على الحالة في القالب للحصول على تجربة مستخدم مكتملة.
<p v-if="loading">Loading...</p>
<p v-else-if="error">{{ error.message }}</p>
<ul v-else>
<li v-for="p in data" :key="p.id">{{ p.title }}</li>
</ul>اختبار سريع
ما دور AbortController في useFetch؟
مراجعة
أنشأت useFetch(url) التي تعرض refs هي data وloading وerror، وتجلب البيانات في onMounted باستخدام نمط try/catch/finally، وتوفّر دالة refetch، وتستخدم AbortController يجري تنظيفه في onUnmounted.
الأسئلة الشائعة
هل درس «useFetch: دالة Composable للبيانات غير المتزامنة» مجاني؟
نعم — نص درس «useFetch: دالة Composable للبيانات غير المتزامنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Vue Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Vue Academy 4 دروس في المجموع.
ماذا ستتعلم في «useFetch: دالة Composable للبيانات غير المتزامنة»؟
مراجع data وloading وerror، والجلب عند التركيب، ودالة refetch، وتنظيف AbortController تتمرن على Vue Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Vue Academy؟
لا تُشترط خبرة سابقة. Vue Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «useFetch: دالة Composable للبيانات غير المتزامنة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Vue Academy هذا؟
نعم. كل درس في Vue Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما الذي يجعل Composable جيدًا؟
- useCounter: دالة Composable بسيطة
- useFetch: دالة Composable للبيانات غير المتزامنة
- VueUse: مكتبة Composables