0Pricing
React Academy · درس

التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية

اضبط staleTime وgcTime للتحكم في توقيت إعادة جلب البيانات من الخادم.

التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

مرحبًا

في هذا الدرس، ستضبطون staleTime وgcTime للتحكم في مدة احتفاظ React Query بالبيانات حديثة، ومدة إبقائها مخزنة مؤقتًا في الذاكرة.

البيانات الحديثة مقابل القديمة

تتتبّع React Query ما إذا كانت البيانات المخزنة مؤقتًا «حديثة» أم «قديمة». تُعاد البيانات الحديثة فورًا من دون طلب شبكة. أما البيانات القديمة فتُعاد فورًا أيضًا، مع بدء إعادة جلب في الخلفية لتحديثها.

staleTime

يحدّد staleTime المدة (بالملي ثانية) التي تظل فيها البيانات حديثة. القيمة الافتراضية هي 0 (أي تصبح قديمة فورًا). يعني ضبطها على 60000 أن البيانات التي جُلبت خلال الدقيقة الأخيرة ستُعاد من دون إعادة جلب في الخلفية.
useQuery({
  queryKey: ['users'],
  queryFn: fetchUsers,
  staleTime: 60_000, // fresh for 60 seconds
})

ضبط staleTime للبيانات الثابتة

بالنسبة إلى البيانات التي نادرًا ما تتغير (مثل قائمة الدول وخيارات الإعداد)، اضبطوا staleTime على قيمة مرتفعة. أما بالنسبة إلى البيانات المباشرة (مثل أسعار الأسهم)، فأبقوا القيمة الافتراضية 0 وفعّلوا الاستقصاء الدوري.
// Effectively never stale — reload only on explicit invalidation
useQuery({ queryKey: ['countries'], queryFn: fetchCountries,
  staleTime: Infinity })

gcTime (جمع البيانات المهملة)

يحدّد gcTime (المعروف سابقًا باسم cacheTime) المدة التي تبقى فيها البيانات المخزنة مؤقتًا وغير المستخدمة في الذاكرة قبل جمعها كبيانات مهملة. القيمة الافتراضية هي 5 دقائق. وحتى بعد gcTime، يمكن لـ React Query إعادة الجلب فورًا عند تركيب مشترك جديد.
useQuery({
  queryKey: ['products'],
  queryFn: fetchProducts,
  gcTime: 10 * 60 * 1000, // keep in memory for 10 minutes
})

staleTime مقابل gcTime

يتحكم staleTime في وقت إعادة الجلب (حداثة البيانات)، بينما يتحكم gcTime في وقت التخلّص من البيانات المخزنة مؤقتًا من الذاكرة. والعلاقة المعتادة هي staleTime <= gcTime.

مؤشرات إعادة الجلب في الخلفية

عندما تعيد React Query جلب البيانات في الخلفية، تكون `isFetching` بقيمة true حتى مع كون `isLoading` بقيمة false (لأن البيانات مخزنة مؤقتًا بالفعل). استخدموا isFetching لعرض مؤشر تحميل بسيط.
const { data, isLoading, isFetching } = useQuery({ /* ... */ });

return (
  <>
    {isLoading ? <Spinner /> : <DataView data={data} />}
    {isFetching && !isLoading && <RefreshIndicator />}
  </>
);

refetchOnWindowFocus

تعيد React Query جلب الاستعلامات القديمة افتراضيًا عندما يعود المستخدم إلى علامة التبويب. عطّلوا هذا الخيار للبيانات التي نادرًا ما تتحدث.
useQuery({
  queryKey: ['settings'],
  queryFn: fetchSettings,
  refetchOnWindowFocus: false,
})

refetchInterval للاستقصاء الدوري

اضبطوا `refetchInterval` لجلب الاستعلام تلقائيًا وفق مؤقت محدد. وهذا مفيد للّوحات التي تعرض بيانات مباشرة.
useQuery({
  queryKey: ['liveStats'],
  queryFn: fetchStats,
  refetchInterval: 5000, // every 5 seconds
})

البيانات النائبة

استخدموا `placeholderData` لعرض البيانات السابقة أثناء تنفيذ إعادة الجلب، مما يمنع تغيّر تخطيط الصفحة. ويجعل خيار keepPreviousData ذلك سهلًا عند تقسيم البيانات إلى صفحات.
import { keepPreviousData } from '@tanstack/react-query';

useQuery({
  queryKey: ['posts', page],
  queryFn: () => fetchPage(page),
  placeholderData: keepPreviousData,
})

تحقّق سريع

ما الذي يحققه ضبط staleTime: Infinity في أحد الاستعلامات؟

مراجعة

يتحكم staleTime في الحداثة، أي المدة قبل أن تؤدي البيانات إلى إعادة جلب في الخلفية. ويتحكم gcTime في الذاكرة، أي المدة التي تبقى فيها البيانات غير المستخدمة مخزنة مؤقتًا. وتشير isFetching إلى عمليات إعادة الجلب في الخلفية. استخدموا placeholderData للحصول على تقسيم سلس للصفحات.

التالي

الدرس التالي: **التغييرات باستخدام useMutation** — ستنشرون البيانات إلى واجهات API وتُبطلون الاستعلامات عند النجاح.

الأسئلة الشائعة

هل درس «التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية» مجاني؟

نعم — نص درس «التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية»؟

اضبط staleTime وgcTime للتحكم في توقيت إعادة جلب البيانات من الخادم. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد React Query وQueryClient
  2. التخزين المؤقت ومدة القِدم وإعادة الجلب في الخلفية
  3. الطفرات باستخدام useMutation
  4. التمرير اللانهائي وتقسيم الصفحات باستخدام useInfiniteQuery
← العودة إلى React Academy