0Pricing
React Academy · Pelajaran

Mutasi dengan useMutation

Kirim data ke API dengan useMutation, tangani status pemuatan/kesalahan, dan batalkan validitas kueri saat berhasil.

Mutasi dengan useMutation adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 3 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 menggunakan useMutation untuk mengirim data ke API, menangani status pemuatan dan error, serta membatalkan validasi query usang setelah mutasi berhasil.

Dasar-Dasar useMutation

Panggil useMutation dengan mutationFn. Hook ini mengembalikan fungsi mutate dan properti status. Panggil mutate() untuk memicu operasi tersebut.
import { useMutation } from '@tanstack/react-query';

const { mutate, isLoading, isError } = useMutation({
  mutationFn: (newPost) => fetch('/api/posts', {
    method: 'POST',
    body: JSON.stringify(newPost),
  }).then(r => r.json()),
});

Memanggil mutate

Panggil `mutate(variables)` dari penangan event. Variables diteruskan ke mutationFn sebagai argumen pertama.
<button onClick={() => mutate({ title: 'New Post' })}>
  Create Post
</button>

Callback: onSuccess, onError, onSettled

Tambahkan opsi callback ke useMutation: onSuccess berjalan setelah mutasi berhasil, onError berjalan saat terjadi kegagalan, dan onSettled berjalan dalam kedua kondisi tersebut (seperti finally).
useMutation({
  mutationFn: createPost,
  onSuccess: (data) => {
    console.log('Created:', data);
    navigate('/posts/' + data.id);
  },
  onError: (error) => {
    toast.error(error.message);
  },
})

Membatalkan Validasi Query Setelah Mutasi

Setelah mutasi berhasil, batalkan validasi query terkait agar React Query mengambil ulang data terbaru. Gunakan queryClient.invalidateQueries dalam onSuccess.
import { useQueryClient } from '@tanstack/react-query';

const queryClient = useQueryClient();

const { mutate } = useMutation({
  mutationFn: createPost,
  onSuccess: () => {
    queryClient.invalidateQueries({ queryKey: ['posts'] });
  },
});

mutateAsync untuk Sintaks await

Gunakan `mutateAsync` alih-alih `mutate` agar Anda dapat menunggu mutasi selesai dan menanganinya dengan try/catch.
const { mutateAsync } = useMutation({ mutationFn: createPost });

async function handleSubmit() {
  try {
    const post = await mutateAsync({ title: 'Draft' });
    navigate('/posts/' + post.id);
  } catch (err) {
    setError(err.message);
  }
}

Menonaktifkan Submit Selama Mutasi

Gunakan `isPending` (atau `isLoading`) untuk menonaktifkan tombol submit selama mutasi berlangsung.
const { mutate, isPending } = useMutation({ mutationFn: saveItem });

<button onClick={() => mutate(item)} disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Pembaruan Optimistis dengan onMutate

Gunakan onMutate untuk memperbarui cache secara optimistis sebelum server merespons. Kembalikan perubahan dalam onError menggunakan konteks yang dikembalikan oleh onMutate.
useMutation({
  mutationFn: likePost,
  onMutate: async (id) => {
    await queryClient.cancelQueries({ queryKey: ['posts'] });
    const prev = queryClient.getQueryData(['posts']);
    queryClient.setQueryData(['posts'], old => old.map(p =>
      p.id === id ? { ...p, likes: p.likes + 1 } : p));
    return { prev };
  },
  onError: (err, id, ctx) => queryClient.setQueryData(['posts'], ctx.prev),
  onSettled: () => queryClient.invalidateQueries({ queryKey: ['posts'] }),
})

Mengatur Ulang State Mutasi

Panggil `reset()` dari useMutation untuk menghapus state mutasi (data, error, dan status). Ini berguna setelah berpindah halaman atau mengosongkan formulir.
const { mutate, isError, reset } = useMutation({ /* ... */ });

{isError && (
  <>
    <p>Error!</p>
    <button onClick={reset}>Try Again</button>
  </>
)}

Beberapa Mutasi Secara Paralel

Panggil mutate beberapa kali secara paralel—setiap pemanggilan dilacak secara terpisah. Gunakan mutateAsync bersama Promise.all untuk mutasi paralel.
await Promise.all([
  mutateAsync({ id: 1, title: 'First' }),
  mutateAsync({ id: 2, title: 'Second' }),
]);

Cek Singkat

Setelah mutasi berhasil, cara apa yang disarankan untuk memastikan UI menampilkan data terbaru?

Ringkasan

useMutation menyediakan mutate, isPending, dan callback siklus hidup. Gunakan onSuccess untuk membatalkan validasi query terkait. Gunakan mutateAsync untuk alur berbasis await. Gunakan onMutate/onError untuk pembaruan optimistis dengan pengembalian jika gagal.

Selanjutnya

Pelajaran berikutnya: **Gulir Tanpa Batas & Paginasi dengan useInfiniteQuery** — Anda akan mengambil data berpaginasi dan memuat halaman tambahan dengan mulus.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mutasi dengan useMutation” gratis?

Ya — teks lengkap “Mutasi dengan useMutation” 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 “Mutasi dengan useMutation”?

Kirim data ke API dengan useMutation, tangani status pemuatan/kesalahan, dan batalkan validitas kueri saat berhasil. 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 3 dari 4.

Berapa lama pelajaran “Mutasi dengan useMutation” 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. Menyiapkan React Query & QueryClient
  2. Penyimpanan Tembolok, Waktu Kedaluwarsa & Pengambilan Ulang di Latar Belakang
  3. Mutasi dengan useMutation
  4. Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery
← Kembali ke React Academy