0Pricing
React Academy · درس

التحديثات التفاؤلية وإبطال التخزين المؤقت

حدّث الواجهة فورًا عند تنفيذ الطفرة وأبطِل البيانات المخزنة مؤقتًا باستخدام العلامات.

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

مرحبًا

في هذا الدرس ستنشئون نقاط نهاية للطفرات في RTK Query، وتحدّثون واجهة المستخدم فورًا باستخدام التحديثات المتفائلة، وتُبطلون إدخالات التخزين المؤقت القديمة باستخدام الوسوم.

نقاط نهاية الطفرات

عرّفوا الطفرات باستخدام builder.mutation(). تعدّل الطفرات بيانات الخادم (POST وPUT وDELETE)، وتعيد hook باسم useMutation.
export const userApi = createApi({
  /* ... */
  endpoints: (builder) => ({
    updateUser: builder.mutation({
      query: ({ id, ...body }) => ({
        url: '/users/' + id,
        method: 'PUT',
        body,
      }),
    }),
  }),
});

استخدام Hook للطفرات

فكّكوا [trigger, result] من hook الطفرة. واستدعوا trigger() باستخدام وسيطة الطفرة. ويحتوي result على isLoading وisSuccess وisError.
const [updateUser, { isLoading }] = useUpdateUserMutation();

const handleSave = async () => {
  await updateUser({ id: 1, name: 'Alice' });
};

وسوم التخزين المؤقت للإبطال

تربط الوسوم بيانات الاستعلام المخزّنة مؤقتًا بالطفرات. عرّفوا `providesTags` في الاستعلامات و`invalidatesTags` في الطفرات. وعند تنفيذ طفرة، يعيد RTK Query تلقائيًا جلب جميع الاستعلامات التي وفّرت الوسوم المُبطلة.
endpoints: (builder) => ({
  getUsers: builder.query({
    query: () => '/users',
    providesTags: ['User'],
  }),
  deleteUser: builder.mutation({
    query: (id) => ({ url: '/users/' + id, method: 'DELETE' }),
    invalidatesTags: ['User'],
  }),
})

إبطال الوسوم بدقة

استخدموا كائنات الوسوم مع id لإجراء إبطال دقيق. وفّروا وسم المستخدم المحدد في getUser، وأبطلوا التخزين المؤقت لذلك المستخدم فقط عند تنفيذ updateUser.
providesTags: (result, error, id) => [{ type: 'User', id }],
invalidatesTags: (result, error, { id }) => [{ type: 'User', id }]

التحديثات المتفائلة باستخدام onQueryStarted

استخدموا onQueryStarted في طفرة لتحديث التخزين المؤقت فورًا قبل استجابة الخادم، ثم التراجع عن التحديث إذا فشلت الطفرة.
updateUser: builder.mutation({
  query: (user) => ({ url: '/users/' + user.id, method: 'PUT', body: user }),
  async onQueryStarted(user, { dispatch, queryFulfilled }) {
    const patch = dispatch(
      userApi.util.updateQueryData('getUser', user.id, draft => {
        Object.assign(draft, user);
      })
    );
    try { await queryFulfilled; }
    catch { patch.undo(); } // roll back on error
  },
})

إبطال جميع مثيلات نوع وسم

يتيح استخدام `{ type: 'User', id: 'LIST' }` كوسم لاستعلامات القوائم إبطال القائمة كاملةً دون إبطال إدخالات المستخدمين الفردية.
providesTags: result =>
  result ? [
    ...result.map(({ id }) => ({ type: 'User', id })),
    { type: 'User', id: 'LIST' },
  ] : [{ type: 'User', id: 'LIST' }]

إبطال التخزين المؤقت يدويًا

أبطلوا وسومًا محددة برمجيًا باستخدام dispatch(api.util.invalidateTags(['User'])). وهذا مفيد في معالجات الأحداث الموجودة خارج المكوّنات.
dispatch(userApi.util.invalidateTags(['User']));

التحديثات التشاؤمية مقابل المتفائلة

المتفائلة: تحدّث التخزين المؤقت قبل استجابة الخادم، ما يوفّر واجهة فورية مع التراجع عند حدوث خطأ. التشاؤمية: تنتظر الخادم ثم تحدّث البيانات، وهي أكثر أمانًا لكنها أبطأ. اختاروا الأسلوب بناءً على احتمال فشل الطفرة.

متى تستخدمون الوسوم مقابل إعادة الجلب اليدوية

استخدموا الوسوم عندما تعرفون بالضبط الاستعلامات التي يجب إبطالها. واستخدموا refetch() من hook الاستعلام لإجراء تحديث يدوي لمرة واحدة. فالوسوم أكثر تلقائية وقابلية للتوسع في واجهات API الكبيرة.

تحقق سريع

في RTK Query، ماذا يفعل invalidatesTags في نقطة نهاية الطفرة؟

مراجعة

عرّفوا الطفرات باستخدام builder.mutation. واستخدموا providesTags في الاستعلامات وinvalidatesTags في الطفرات لإعادة الجلب تلقائيًا. واستخدموا onQueryStarted مع updateQueryData للتحديثات المتفائلة، وundo() للتراجع عنها.

اكتمل المقرر

تهانينا! لقد أتممتم **Redux Toolkit & RTK Query**. يمكنكم الآن إنشاء شرائح Redux، والتعامل مع المنطق غير المتزامن باستخدام createAsyncThunk، وإدارة حالة الخادم باستخدام التخزين المؤقت والتحديثات المتفائلة في RTK Query.

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

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

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

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

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

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

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

كم من الوقت يستغرق درس «التحديثات التفاؤلية وإبطال التخزين المؤقت»؟

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

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

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

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

  1. شرائح Redux Toolkit وcreateSlice
  2. المنطق غير المتزامن باستخدام createAsyncThunk
  3. ‏RTK Query: نقاط النهاية والتخزين المؤقت التلقائي
  4. التحديثات التفاؤلية وإبطال التخزين المؤقت
← العودة إلى React Academy