Cache Apollo: Penormalan dan Kemas Kini
Fahami InMemoryCache Apollo yang dinormalkan dan kemas kini data cache selepas mutasi tanpa mendapatkan semula data.
Cache Apollo: Penormalan dan Kemas Kini ialah pelajaran React Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Academy merangkumi sejumlah 4 pelajaran.
Cara InMemoryCache Menormalkan Data
InMemoryCache menyimpan setiap objek menggunakan kunci cache yang terdiri daripada __typename dan id: User:1, Post:42. Apabila sesuatu pertanyaan mengembalikan User dengan id "1", objek itu disimpan sekali di bawah kunci ini tanpa mengira berapa banyak pertanyaan berbeza yang menyertakannya.
Mana-mana pertanyaan seterusnya yang mendapatkan User:1 yang sama membaca daripada satu entri cache itu, memastikan semua komponen melihat data yang sama.
Kemas Kini Automatik Merentas Pertanyaan
Apabila mutasi mengembalikan objek User:1 yang dikemas kini, Apollo menulisnya ke entri cache User:1. Setiap pertanyaan aktif yang menyertakan User:1 secara automatik mencerminkan medan yang dikemas kini dalam antara muka pengguna tanpa kod tambahan.
Penyebaran automatik ini ialah kelebihan utama cache ternormalisasi berbanding cache dokumen (berkunci pertanyaan).
cache.readQuery
Baca hasil semasa yang dicache bagi sesuatu pertanyaan: cache.readQuery({ query: GET_USERS }) mengembalikan objek data seolah-olah useQuery telah mengembalikannya. Mengembalikan null jika pertanyaan itu tiada dalam cache.
Gunakan readQuery dalam fungsi kemas kini mutasi untuk membaca senarai semasa sebelum mengubah suainya.
cache.writeQuery
cache.writeQuery({ query: GET_USERS, data: { users: updatedUsers } }) menulis terus ke cache, lalu mencetuskan pemaparan semula dalam semua komponen yang membaca GET_USERS. Tiada permintaan rangkaian dibuat.
Gabungkan readQuery dan writeQuery untuk melaksanakan kemas kini cache yang tidak boleh diubah suai: baca, hasilkan tatasusunan baharu, kemudian tulis semula.
cache.modify untuk Kemas Kini Entiti Secara Langsung
cache.modify({ id: cache.identify(user), fields: { name: () => 'New Name' } }) mengubah suai medan entiti tertentu yang dicache secara langsung. Anda tidak perlu membaca pertanyaan terlebih dahulu apabila mengetahui ID cache entiti itu.
Objek medan memetakan nama medan kepada fungsi pengubah yang menerima nilai semasa dan mengembalikan nilai baharu.
Mengemas Kini Cache Selepas Mutasi
Hantar fungsi kemas kini kepada useMutation: useMutation(ADD_POST, { update(cache, { data: { addPost } }) { cache.modify({ id: cache.identify(user), fields: { posts: existingPosts => [...existingPosts, addPost] } }); } }).
Ini menambahkan kiriman baharu pada tatasusunan kiriman pengguna yang dicache, lalu mengemas kini semua komponen yang memaparkan senarai kiriman pengguna.
cache.evict: Mengalih Keluar Entri Cache
cache.evict({ id: 'User:1' }) mengalih keluar entri User:1 daripada cache. Mana-mana pertanyaan aktif yang menyertakan User:1 akan dipaparkan semula tanpa entiti itu dalam hasilnya.
Selepas mengalih keluar entri, panggil cache.gc() untuk mengalih keluar objek yang kini tidak boleh dicapai daripada pertanyaan akar. Ini mencegah kebocoran memori dalam aplikasi yang berjalan lama.
Pengutipan Sampah
cache.gc() merentasi graf cache bermula daripada semua pertanyaan aktif dan mengalih keluar mana-mana entiti yang tidak lagi boleh dicapai. Ia selamat dipanggil secara berkala atau selepas mutasi kelompok yang memadamkan banyak entiti.
Entiti yang dirujuk oleh cangkuk useQuery aktif tidak pernah dikutip oleh pengutipan sampah; hanya entiti yatim yang tidak lagi menjadi sebahagian daripada mana-mana hasil pertanyaan akan dikutip.
Penghalaan Semula Cache dengan Dasar Medan
Jika anda menyoal entiti tunggal (GET_USER mengikut id) yang sudah dicache sebagai sebahagian daripada pertanyaan senarai, Apollo boleh membacanya daripada cache tanpa perjalanan pergi balik rangkaian menggunakan dasar medan: keyArgs dan fungsi read dalam dasar jenis.
Fungsi read mengembalikan rujukan cache: return toReference({ __typename: 'User', id: args.id }), yang memberitahu Apollo supaya membaca daripada entri cache User:id yang sedia ada.
keyFields Tersuai untuk ID Bukan Standard
Jika entiti anda menggunakan medan selain id sebagai kunci uniknya (contohnya slug atau uuid), konfigurasikannya dalam dasar jenis: new InMemoryCache({ typePolicies: { Post: { keyFields: ['slug'] } } }).
Apollo kemudiannya menggunakan Post:my-post-slug sebagai kunci cache dan tidak memerlukan medan id, sekali gus mengekalkan normalisasi untuk skema bukan standard.
refetchQueries berbanding Fungsi Kemas Kini
refetchQueries: [{ query: GET_USERS }] dalam pilihan useMutation mencetuskan pengambilan semula melalui rangkaian selepas mutasi selesai. Kaedah ini lebih mudah tetapi sentiasa membuat permintaan rangkaian.
Fungsi kemas kini mengubah suai cache secara setempat dan mengelakkan perjalanan pergi balik rangkaian. Gunakan refetchQueries apabila logik kemas kini cache terlalu rumit untuk ditulis atau apabila medan yang dikira pelayan menjadikan kemas kini cache setempat tidak boleh dipercayai.
Kunci Normalisasi InMemoryCache
Apakah format kunci cache lalai yang digunakan oleh InMemoryCache untuk menyimpan entiti?
Ringkasan Pelajaran
InMemoryCache menormalkan entiti berdasarkan __typename+id, sekali gus membolehkan kemas kini automatik merentas pertanyaan. Baca dan tulis cache dengan cache.readQuery, cache.writeQuery, dan cache.modify. Alih keluar entiti dengan cache.evict diikuti cache.gc. Konfigurasikan medan kunci tersuai melalui typePolicies untuk kunci utama bukan id.
Gunakan fungsi kemas kini mutasi untuk kecekapan cache setempat; gunakan refetchQueries apabila medan yang dikira pelayan menjadikan kemas kini setempat tidak boleh dipercayai.
Pelajari React dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 88
- Pelajaran
- 324
Soalan Lazim
Adakah pelajaran “Cache Apollo: Penormalan dan Kemas Kini” percuma?
Ya — teks penuh “Cache Apollo: Penormalan dan Kemas Kini” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus React Academy, tingkat taraf kepada CoddyKit PRO. Kursus React Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Cache Apollo: Penormalan dan Kemas Kini”?
Fahami InMemoryCache Apollo yang dinormalkan dan kemas kini data cache selepas mutasi tanpa mendapatkan semula data. Anda berlatih React Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan React Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran React Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Cache Apollo: Penormalan dan Kemas Kini” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Asas GraphQL untuk Pembangun React
- Menyediakan Klien Apollo dalam React
- Hook useQuery dan useMutation
- Cache Apollo: Penormalan dan Kemas Kini