0Pricing
React Academy · Pelajaran

Cache Apollo: Normalisasi dan Pembaruan

Pahami InMemoryCache Apollo yang ternormalisasi dan perbarui data cache setelah mutasi tanpa mengambil ulang data.

Cache Apollo: Normalisasi dan Pembaruan 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.

Cara InMemoryCache Menormalisasi Data

InMemoryCache menyimpan setiap objek berdasarkan kunci cache yang tersusun dari __typename dan id: User:1, Post:42. Saat kueri mengembalikan User dengan id "1", objek tersebut disimpan satu kali di bawah kunci ini, terlepas dari berapa banyak kueri berbeda yang menyertakannya.

Kueri berikutnya yang mengambil User:1 akan membaca satu entri cache tersebut, sehingga semua komponen melihat data yang sama.

Pembaruan Otomatis Lintas Kueri

Saat mutasi mengembalikan objek User:1 yang telah diperbarui, Apollo menulisnya ke entri cache User:1. Setiap kueri aktif yang menyertakan User:1 akan otomatis menampilkan bidang yang diperbarui di UI tanpa kode tambahan.

Propagasi otomatis ini merupakan keunggulan utama cache ternormalisasi dibandingkan cache dokumen (berbasis kueri).

cache.readQuery

Baca hasil kueri yang saat ini tersimpan dalam cache: cache.readQuery({ query: GET_USERS }) mengembalikan objek data seolah-olah useQuery telah mengembalikannya. Mengembalikan null jika kueri tidak ada dalam cache.

Gunakan readQuery di dalam fungsi pembaruan mutasi untuk membaca daftar terkini sebelum mengubahnya.

cache.writeQuery

cache.writeQuery({ query: GET_USERS, data: { users: updatedUsers } }) menulis langsung ke cache, sehingga memicu render ulang pada semua komponen yang membaca GET_USERS. Tidak ada permintaan jaringan yang dibuat.

Gabungkan readQuery dan writeQuery untuk menerapkan pembaruan cache tanpa mutasi: baca, buat array baru, lalu tulis kembali.

cache.modify untuk Pembaruan Langsung Entitas

cache.modify({ id: cache.identify(user), fields: { name: () => 'New Name' } }) secara langsung mengubah bidang entitas tertentu yang tersimpan dalam cache. Anda tidak perlu membaca kueri terlebih dahulu jika sudah mengetahui ID cache entitas tersebut.

Objek fields memetakan nama bidang ke fungsi pengubah yang menerima nilai saat ini dan mengembalikan nilai baru.

Memperbarui Cache Setelah Mutasi

Teruskan fungsi update ke useMutation: useMutation(ADD_POST, { update(cache, { data: { addPost } }) { cache.modify({ id: cache.identify(user), fields: { posts: existingPosts => [...existingPosts, addPost] } }); } }).

Ini menambahkan postingan baru ke array postingan pengguna yang tersimpan dalam cache, sehingga memperbarui semua komponen yang menampilkan daftar postingan pengguna.

cache.evict: Menghapus Entri Cache

cache.evict({ id: 'User:1' }) menghapus entri User:1 dari cache. Kueri aktif apa pun yang menyertakan User:1 akan dirender ulang tanpa entitas tersebut dalam hasilnya.

Setelah mengeluarkan entri, panggil cache.gc() untuk menghapus objek yang kini tidak lagi dapat dijangkau dari kueri akar. Ini mencegah kebocoran memori dalam aplikasi yang berjalan lama.

Pengumpulan Sampah

cache.gc() menelusuri graf cache mulai dari semua kueri aktif dan menghapus entitas yang tidak lagi dapat dijangkau. Fungsi ini aman dipanggil secara berkala atau setelah mutasi berkelompok yang menghapus banyak entitas.

Entitas yang dirujuk oleh hook useQuery aktif tidak pernah dikumpulkan sampahnya; hanya entitas yatim yang tidak lagi menjadi bagian dari hasil kueri mana pun yang akan dihapus.

Pengalihan Cache dengan Kebijakan Bidang

Jika Anda mengkueri satu entitas (GET_USER berdasarkan id) yang sudah tersimpan sebagai bagian dari kueri daftar, Apollo dapat membacanya dari cache tanpa perjalanan bolak-balik jaringan menggunakan kebijakan bidang: keyArgs dan fungsi read dalam kebijakan tipe.

Fungsi read mengembalikan referensi cache: return toReference({ __typename: 'User', id: args.id }), yang memberi tahu Apollo untuk membaca dari entri cache User:id yang sudah ada.

keyFields Kustom untuk ID Nonstandar

Jika entitas Anda menggunakan bidang selain id sebagai kunci uniknya, misalnya slug atau uuid, konfigurasikan bidang tersebut dalam kebijakan tipe: new InMemoryCache({ typePolicies: { Post: { keyFields: ['slug'] } } }).

Apollo kemudian menggunakan Post:my-post-slug sebagai kunci cache, bukan mengharuskan adanya bidang id, sehingga normalisasi tetap berjalan untuk skema nonstandar.

refetchQueries vs Fungsi Pembaruan

refetchQueries: [{ query: GET_USERS }] dalam opsi useMutation memicu pengambilan ulang melalui jaringan setelah mutasi selesai. Cara ini lebih sederhana, tetapi selalu membuat permintaan jaringan.

Fungsi pembaruan mengubah cache secara lokal dan menghindari perjalanan bolak-balik jaringan. Gunakan refetchQueries jika logika pembaruan cache terlalu rumit untuk ditulis atau jika bidang yang dihitung server membuat pembaruan cache lokal tidak dapat diandalkan.

Kunci Normalisasi InMemoryCache

Apa format kunci cache bawaan yang digunakan InMemoryCache untuk menyimpan entitas?

Ringkasan Pelajaran

InMemoryCache menormalisasi entitas berdasarkan __typename+id, sehingga memungkinkan pembaruan otomatis lintas kueri. Baca dan tulis cache dengan cache.readQuery, cache.writeQuery, dan cache.modify. Hapus entitas dengan cache.evict, lalu cache.gc. Konfigurasikan bidang kunci khusus melalui typePolicies untuk kunci utama yang bukan id.

Gunakan fungsi pembaruan mutasi agar cache lokal lebih efisien; gunakan refetchQueries jika bidang yang dihitung server membuat pembaruan lokal tidak dapat diandalkan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Cache Apollo: Normalisasi dan Pembaruan” gratis?

Ya — teks lengkap “Cache Apollo: Normalisasi dan Pembaruan” 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 “Cache Apollo: Normalisasi dan Pembaruan”?

Pahami InMemoryCache Apollo yang ternormalisasi dan perbarui data cache setelah mutasi tanpa mengambil ulang 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 4 dari 4.

Berapa lama pelajaran “Cache Apollo: Normalisasi dan Pembaruan” 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