الاختيارين في Zod
parse بيرجع الداتا لو صحيحة، ويرمي ZodError لو غير صحيحة:
parse.ts
userSchema.parse(data);safeParse مش بيرمي Exception تلقائيًا. بيرجع نتيجة فيها success:
safe-parse.ts
const result = userSchema.safeParse(data);if (!result.success) { console.error(result.error); return;}console.log(result.data);أنهي واحد مع TanStack Query؟
بالنسبة للـ API layer مع TanStack Query، الميل لـ parse() لما يكون عدم تطابق الـ response مع الـ contract معناه إن الـ query فشلت فعلًا. ده بيخلّي الخطأ يوصل مباشرةً إلى isError.
أما safeParse() فمفيد لما تكون عايز تتحكم في الخطأ بنفسك، أو تعمل fallback آمن، أو تتعامل مع أجزاء من الداتا بشكل منفصل.
الاختيار الافتراضي: parse() في دوال الـ API. اعمل handling مركزي للـ errors والـ logging، وسيب كل شاشة تعرض رسالة مناسبة لسياقها.
خلّصت الفصل لما
🧠 اختبر نفسك
١) ليه parse أنسب كاختيار افتراضي مع TanStack Query؟
لأن الـ throw بيدخّل الـ query في
isError لما الـ response مش مطابق للعقد.٢) إمتى safeParse؟
لما عايز تتحكم في الخطأ، أو تعمل fallback، أو تتعامل مع أجزاء من الداتا لوحدها.