0Pricing
React Academy · Pelajaran

Hook useQuery dan useMutation

Ambil data dengan useQuery, jalankan mutasi dengan useMutation, lalu tangani state pemuatan, kesalahan, dan data.

Hook useQuery dan 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.

Mendefinisikan Kueri dengan gql

Tag templat gql dari @apollo/client mengurai string kueri GraphQL menjadi DocumentNode saat modul dimuat. Definisikan kueri di luar komponen: const GET_USERS = gql`query GetUsers { users { id name email } }`.

Perhatikan: dalam kode produksi, gunakan string bertanda kutip tunggal yang dibungkus oleh gql sebagai templat bertanda. Tag gql menerima sintaks literal templat dalam sumber JavaScript.

Nilai Kembalian useQuery

useQuery(GET_USERS) mengembalikan { loading, error, data, refetch, fetchMore, networkStatus }. loading bernilai true selama pengambilan awal. error berisi kesalahan GraphQL atau jaringan apa pun. data berisi hasil kueri yang sesuai dengan bentuk kueri.

Periksa loading dan error terlebih dahulu sebelum mengakses data agar tidak merender nilai null.

Pola Antarmuka Pengguna untuk Pemuatan dan Kesalahan

Render komponen kerangka selama loading bernilai true. Render pesan kesalahan jika error ditetapkan (akses error.message untuk teks kesalahan). Hanya render konten sebenarnya ketika data ditetapkan dan loading bernilai false.

Pola tiga keadaan ini (loading / error / data) adalah struktur komponen Apollo Client standar.

Mengakses Data Kueri

Objek data mencerminkan struktur kueri GraphQL. Untuk query { users { id name } }, akses data.users yang merupakan array objek {id, name}. Tipe TypeScript akan sesuai jika Anda menggunakan graphql-codegen untuk menghasilkan hook bertipe.

Tanpa pembuatan kode, data diketik sebagai any. Dengan pembuatan kode, useQuery otomatis mengembalikan data dengan tipe lengkap.

Variabel dalam useQuery

Teruskan variabel sebagai argumen kedua: useQuery(GET_USER, { variables: { id: userId } }). Kueri otomatis dijalankan ulang ketika userId berubah, seperti array dependensi useEffect.

Apollo Client menyimpan setiap kombinasi unik kueri + variabel secara terpisah, sehingga GET_USER dengan id: "1" dan GET_USER dengan id: "2" memiliki entri cache yang independen.

Melewati Kueri

Teruskan skip: true dalam opsi untuk mencegah kueri dijalankan: useQuery(GET_USER, { skip: !userId }). Apollo tidak mengirimkan permintaan ketika skip bernilai true, dan loading bernilai false serta data bernilai undefined.

Ini adalah padanan Apollo untuk kunci null milik SWR dan opsi enabled: false milik React Query.

Mengambil Ulang Secara Manual

Fungsi refetch yang dikembalikan oleh useQuery memicu permintaan jaringan terlepas dari kebijakan pengambilan. Panggil refetch() setelah tindakan pengguna yang mungkin mengubah data server, misalnya refetch() setelah mengirimkan formulir.

Teruskan variabel baru ke refetch: refetch({ id: newId }) untuk mengambil ulang dengan parameter yang berbeda.

Melacak Status Jaringan

Teruskan notifyOnNetworkStatusChange: true dalam opsi untuk menerima pembaruan saat status jaringan berubah (mengambil data, mengambil ulang, pemeriksaan berkala, dan sebagainya). Kolom networkStatus berisi kode numerik dari enum NetworkStatus.

Ini memungkinkan Anda menampilkan indikator halus "menyegarkan" saat pengambilan ulang di latar belakang sedang berlangsung tanpa menyembunyikan data saat ini.

Sintaks useMutation

useMutation(CREATE_USER) mengembalikan [mutateFunction, { loading, error, data, reset }]. Fungsi mutasi dipanggil ketika pengguna mengirimkan formulir. Fungsi ini mengembalikan hasil asinkron berupa { data, errors }.

Panggil mutate({ variables: { name: 'Alice', email: 'alice@example.com' } }) untuk meneruskan masukan ke mutasi.

Panggilan Balik onCompleted dan onError

Teruskan onCompleted: (data) => navigate('/dashboard') dan onError: (error) => showToast(error.message) ke opsi useMutation. Panggilan balik ini dijalankan setelah mutasi selesai atau ditolak.

onCompleted menerima data hasil mutasi, yang berguna untuk memicu navigasi, menampilkan pesan keberhasilan, atau mengatur ulang formulir.

Respons Optimistis dalam useMutation

Opsi optimisticResponse dalam pemanggilan mutate segera menulis hasil sintetis ke cache sebelum server memberikan respons. Apollo langsung merender data optimistis, lalu menggantinya dengan respons server yang sebenarnya saat respons tersebut tiba.

Jika mutasi gagal, Apollo secara otomatis mengembalikan cache ke keadaan sebelum optimisme, sehingga antarmuka tetap konsisten.

Opsi skip pada useQuery

Apa yang terjadi pada useQuery saat skip: true diteruskan?

Ringkasan Pelajaran

Definisikan kueri dengan tag gql, panggil useQuery(QUERY, { variables, skip }), lalu tangani keadaan loading/error/data. useMutation mengembalikan fungsi pemicu dan objek status; panggil fungsi tersebut dengan variabel, lalu tangani hasilnya melalui onCompleted dan onError. Respons optimistis segera memperbarui cache dan secara otomatis membatalkan perubahan jika terjadi kegagalan.

Opsi skip dan pengambilan ulang yang digerakkan oleh variabel menangani pemuatan data bersyarat dan berparameter.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Hook useQuery dan useMutation” gratis?

Ya — teks lengkap “Hook useQuery dan 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 “Hook useQuery dan useMutation”?

Ambil data dengan useQuery, jalankan mutasi dengan useMutation, lalu tangani state pemuatan, kesalahan, dan data. 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 “Hook useQuery dan 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. Dasar-Dasar GraphQL untuk Pengembang React
  2. Menyiapkan Apollo Client di React
  3. Hook useQuery dan useMutation
  4. Cache Apollo: Normalisasi dan Pembaruan
← Kembali ke React Academy