الـ errors · فصل ٣

عرض الـ error لو الـ response مش متوقع

network · HTTP · validation · business · isError · logging
🎯 الهدف: تفرّق بين أنواع الأخطاء، وتخلي خطأ الـ validation يوصل لـ isError، وتعرض للمستخدم رسالة عامة مش تفاصيل الـ schema.

نوعين… أربعة أخطاء

لازم نفرّق بين أنواع الأخطاء، لأن التعامل مش واحد:

نوع الخطأمثالالتعامل المناسب
Network errorالسيرفر مش متاحرسالة اتصال أو إعادة المحاولة
HTTP error401 أو 500التعامل مع الـ status code
Validation errorid رجع string بدل numberتسجيل الخطأ ومراقبته، ورسالة مناسبة للمستخدم حسب الشاشة
Business errorالمستخدم مش مسموح له ينفذ العمليةرسالة مفهومة للمستخدم

TanStack Query بتاخد الـ throw

لو بنستخدم TanStack Query، فالـ validation error اللي بترميه parse() هيخلي الـ Query تدخل حالة error تلقائيًا.

UsersList.tsx
const userQuery = useQuery({  queryKey: ["user"],  queryFn: getUser,});if (userQuery.isPending) {  return <div>Loading...</div>;}if (userQuery.isError) {  return <div>Failed to load user</div>;}return <div>{userQuery.data.name}</div>;

ده كفاية عشان تمنع عرض الداتا غير الصحيحة.

خلّصت الفصل لما

🧠 اختبر نفسك
١) خطأ الـ validation هيوصل للشاشة إزاي مع TanStack Query؟
parse() بترمي ZodError، فالـ query بتدخل isError، والـ UI بيعرض حالة الخطأ.
٢) المستخدم يشوف Expected number, received string at id؟
لأ. رسالة عامة للشاشة، وتفاصيل الخطأ للـ logging أو الـ monitoring.