الاستعلام بيديك أعلام، مش حالة تحميل واحدة.
| العلامة | معناها |
|---|---|
isPending | لسه مفيش داتا خالص. ده أول تحميل |
isFetching | فيه طلب شغال دلوقتي، حتى لو داتا قديمة ظاهرة |
isError | الطلب فشل |
isSuccess | الداتا جاهزة |
data | الداتا نفسها |
error | كائن الخطأ |
القديم يفضل ظاهر
isPending لأول مرة بس. isFetching لأي طلب، حتى والتحديث في الخلفية.
أول فتح للصفحة: مفيش داتا، فـ isPending يبقى صح. لما ترجع لنفس الصفحة والداتا في الكاش، تشوفها فورًا، و isFetching يبقى صح وهو بيجدّدها. الاسم الشائع للنمط ده stale-while-revalidate: اعرض اللي عندك، وحدّث ورا الكواليس.
قد إيه تفضل صالحة
fresh-for-a-minute.jsx
useQuery({ queryKey: ["students"], queryFn: getStudents, staleTime: 1000 * 60, gcTime: 1000 * 60 * 5,});staleTime قد إيه الداتا تفضل طازة قبل ما المكتبة تحسها قديمة وتعيد جلبها. دقيقة هنا معناها: خلال الدقيقة دي، فتح الصفحة تاني مش هيعمل طلب لوحده.
gcTime قد إيه النسخة تفضل في الذاكرة بعد ما محدش بقى بيستخدم الاستعلام. بعد خمس دقايق من غير مستمع، تتشال. ده جمع القمامة، مش صلاحية العرض.
الافتراضي إن staleTime صفر. يعني كل ما تفتح الصفحة، فيه إعادة جلب في الخلفية، والداتا القديمة تظهر لحد ما الجديد يوصل.
خلّصت الفصل لما
🧠 اختبر نفسك
١) رجعت لصفحة الطلاب والداتا متخزنة. أنهي علم يبقى صح وقت التجديد؟
isFetching. isPending لأ، لأن فيه داتا ظاهرة.
٢) staleTime دقيقة. فتحت الصفحة بعد ٢٠ ثانية. فيه طلب لوحده؟
لأ. الداتا لسه طازة، فمفيش إعادة جلب تلقائية.
٣) gcTime خلص ومحدش بيستخدم الاستعلام. إيه اللي يحصل؟
النسخة تتشال من الذاكرة. دي مش علامة إن العرض كان غلط.