0Pricing
React Academy · Pelajaran

Pembaruan Optimistis & Pembatalan Validitas Tembolok

Perbarui UI seketika saat mutasi dan batalkan validitas data yang tersimpan di tembolok dengan tag.

Pembaruan Optimistis & Pembatalan Validitas Tembolok adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Selamat Datang

Dalam pelajaran ini, Anda akan membuat endpoint mutation di RTK Query, memperbarui UI secara langsung dengan pembaruan optimistis, dan membatalkan entri cache yang sudah usang menggunakan tag.

Endpoint Mutation

Definisikan mutation dengan builder.mutation(). Mutation mengubah data di server (POST, PUT, DELETE) dan mengembalikan hook useMutation.
export const userApi = createApi({
  /* ... */
  endpoints: (builder) => ({
    updateUser: builder.mutation({
      query: ({ id, ...body }) => ({
        url: '/users/' + id,
        method: 'PUT',
        body,
      }),
    }),
  }),
});

Menggunakan Hook Mutation

Pisahkan [trigger, result] dari hook mutation. Panggil trigger() dengan argumen mutation. result berisi isLoading, isSuccess, dan isError.
const [updateUser, { isLoading }] = useUpdateUserMutation();

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

Tag Cache untuk Invalidasi

Tag menghubungkan data query yang tersimpan dalam cache dengan mutation. Definisikan `providesTags` pada query dan `invalidatesTags` pada mutation. Saat mutation dijalankan, RTK Query secara otomatis mengambil ulang semua query yang menyediakan tag yang dibatalkan.
endpoints: (builder) => ({
  getUsers: builder.query({
    query: () => '/users',
    providesTags: ['User'],
  }),
  deleteUser: builder.mutation({
    query: (id) => ({ url: '/users/' + id, method: 'DELETE' }),
    invalidatesTags: ['User'],
  }),
})

Invalidasi Tag Terperinci

Gunakan objek tag dengan id untuk melakukan invalidasi secara lebih terperinci. Sediakan tag pengguna tertentu pada getUser dan batalkan hanya cache pengguna tersebut saat updateUser dijalankan.
providesTags: (result, error, id) => [{ type: 'User', id }],
invalidatesTags: (result, error, { id }) => [{ type: 'User', id }]

Pembaruan Optimistis dengan onQueryStarted

Gunakan onQueryStarted dalam mutation untuk segera memperbarui cache sebelum server memberikan respons, lalu kembalikan perubahan jika mutation gagal.
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
  },
})

Membatalkan Semua Instance dari Jenis Tag

Menggunakan `{ type: 'User', id: 'LIST' }` sebagai tag untuk query daftar memungkinkan Anda membatalkan seluruh daftar tanpa membatalkan entri pengguna secara individual.
providesTags: result =>
  result ? [
    ...result.map(({ id }) => ({ type: 'User', id })),
    { type: 'User', id: 'LIST' },
  ] : [{ type: 'User', id: 'LIST' }]

Invalidasi Cache Manual

Batalkan tag tertentu secara terprogram dengan dispatch(api.util.invalidateTags(['User'])). Cara ini berguna dalam pengendali peristiwa yang berada di luar komponen.
dispatch(userApi.util.invalidateTags(['User']));

Pembaruan Pesimistis vs Optimistis

Optimistis: perbarui cache sebelum server memberikan respons (UI langsung diperbarui dan perubahan dikembalikan jika terjadi kesalahan). Pesimistis: tunggu respons server, lalu lakukan pembaruan (lebih aman, tetapi lebih lambat). Pilih pendekatan berdasarkan risiko kegagalan mutation.

Kapan Menggunakan Tag vs Pengambilan Ulang Manual

Gunakan tag ketika Anda mengetahui query mana yang harus dibatalkan secara tepat. Gunakan refetch() dari hook query untuk penyegaran manual satu kali. Tag lebih otomatis dan mudah dikembangkan untuk API berukuran besar.

Pemeriksaan Singkat

Di RTK Query, apa yang dilakukan invalidatesTags pada endpoint mutation?

Rangkuman

Definisikan mutation dengan builder.mutation. Gunakan providesTags pada query dan invalidatesTags pada mutation untuk pengambilan ulang otomatis. Gunakan onQueryStarted bersama updateQueryData untuk pembaruan optimistis dan undo() untuk mengembalikan perubahan.

Kursus Selesai

Selamat! Anda telah menyelesaikan **Redux Toolkit & RTK Query**. Kini Anda dapat membuat slice Redux, menangani logika asinkron dengan createAsyncThunk, dan mengelola state server dengan caching serta pembaruan optimistis RTK Query.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pembaruan Optimistis & Pembatalan Validitas Tembolok” gratis?

Ya — teks lengkap “Pembaruan Optimistis & Pembatalan Validitas Tembolok” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pembaruan Optimistis & Pembatalan Validitas Tembolok”?

Perbarui UI seketika saat mutasi dan batalkan validitas data yang tersimpan di tembolok dengan tag. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Pembaruan Optimistis & Pembatalan Validitas Tembolok” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Slice Redux Toolkit & createSlice
  2. Logika Asinkron dengan createAsyncThunk
  3. RTK Query: Endpoint & Penyimpanan Tembolok Otomatis
  4. Pembaruan Optimistis & Pembatalan Validitas Tembolok
← Kembali ke React Academy