Mengimplementasikan Pembaruan Optimistis Secara Manual
Terapkan state optimistis secara lokal, antrekan mutasi, lalu tangani kasus berhasil dan gagal secara eksplisit.
Mengimplementasikan Pembaruan Optimistis Secara Manual adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.
Status Sebelum Mutasi
Pembaruan optimistis manual dimulai dengan status komponen lokal yang diinisialisasi dari data server: const [items, setItems] = useState(serverItems). Status lokal inilah yang Anda tampilkan dan ubah secara optimistis. Anda NOT boleh mengubah langsung data yang diambil dari server — simpan salinan lokal yang Anda kendalikan.
Langkah Pembaruan Optimistis
Saat pengguna memicu mutasi (mengeklik "Tambah", "Suka", atau "Hapus"), lakukan pembaruan status segera sebelum memanggil API: setItems(prev => [...prev, newItem]). UI langsung mencerminkan perubahan tersebut. Hanya setelah pembaruan ini Anda menjalankan permintaan jaringan yang sebenarnya.
Menyimpan Status Sebelumnya
Sebelum melakukan pembaruan optimistis, simpan status saat ini: const previousItems = items. Cuplikan ini menjadi target pengembalian Anda. Jika panggilan API gagal, pulihkan nilai ini. Simpan dalam variabel, bukan status, karena Anda hanya membutuhkannya selama mutasi masih menunggu.
Melakukan Panggilan API
Setelah pembaruan optimistis, lakukan panggilan API secara asinkron. Bungkus dalam blok try/catch. Jika berhasil, Anda dapat mengambil ulang data secara opsional untuk menyelaraskannya dengan status server, atau mempercayai status optimistis jika server akan mengembalikan data yang sama. Jika gagal, gunakan status sebelumnya yang telah disimpan untuk melakukan pengembalian.
Mengembalikan Saat Gagal
Di blok catch mutasi, jalankan: setItems(previousItems). Ini mengembalikan status ke keadaan sebelum pembaruan optimistis. Setelah pengembalian, tampilkan notifikasi kesalahan. Pengguna memahami bahwa kegagalan yang jarang terjadi bisa saja terjadi — yang tidak dapat mereka terima adalah ketidakkonsistenan yang tidak diberi tahu.
Menampilkan Notifikasi Kesalahan Saat Gagal
Setelah mengembalikan status, tampilkan pesan kesalahan: "Tidak dapat menyimpan perubahan. Silakan coba lagi." dengan tombol Coba Lagi yang menjalankan kembali mutasi yang sama. Dengan demikian, pengguna tetap memiliki kendali. Kombinasi pengembalian + notifikasi kesalahan + coba lagi menangani kegagalan dengan baik tanpa memblokir seluruh UI.
Masalah ID Sementara
Saat menambahkan butir baru secara optimistis, server belum menetapkan ID nyata. Buat ID sementara untuk butir optimistis tersebut: const tempId = crypto.randomUUID(). Gunakan ID ini sebagai kunci butir dalam daftar. Setelah API berhasil merespons, ganti ID sementara dengan ID nyata yang ditetapkan server.
Menyelaraskan ID Sementara
Setelah mutasi pembuatan berhasil, server merespons dengan ID nyata. Perbarui status untuk mengganti butir sementara: setItems(prev => prev.map(item => item.id === tempId ? { ...item, id: serverResponse.id } : item)). Penyelarasan ini memastikan operasi berikutnya menggunakan ID server yang benar.
Masalah Kondisi Balapan
Jika pengguna memicu dua mutasi secara berurutan dengan cepat, respons mungkin tiba tidak berurutan. Respons mutasi kedua mungkin tiba sebelum respons pertama, dan pengembalian mutasi pertama dapat menimpa status yang benar dari mutasi kedua. Ini adalah kondisi balapan yang khusus terjadi pada UI optimistis.
Membuat Mutasi Berurutan untuk Mencegah Kondisi Balapan
Salah satu solusi untuk kondisi balapan adalah membuat mutasi berurutan menggunakan antrean. Selama mutasi sedang berlangsung, nonaktifkan tombol pemicu dengan mengatur status isSubmitting menjadi aktif. Izinkan mutasi berikutnya hanya setelah mutasi sebelumnya selesai. Cara ini mengorbankan sebagian daya tanggap, tetapi menjamin urutan status yang benar.
Pola Penghapusan Optimistis
Untuk operasi penghapusan: simpan elemen sebelumnya, keluarkan elemen yang dihapus dari status, panggil API penghapusan, lalu pulihkan status jika terjadi kegagalan. Penghapusan lebih sederhana daripada penambahan karena tidak memerlukan penyelarasan ID, tetapi prinsip yang sama tetap berlaku. Pertimbangkan untuk menambahkan jeda singkat sebelum penghapusan dengan menampilkan opsi "batalkan" sebelum melakukan panggilan API.
ID Sementara dalam Pembaruan Optimistis
Mengapa elemen yang ditambahkan secara optimistis memerlukan ID sementara?
Rangkuman Pelajaran: Pembaruan Optimistis Manual
Pola manualnya: simpan previousItems, gunakan setItems untuk menetapkan status baru, lakukan panggilan API, lalu pulihkan status saat gagal dengan setItems(previousItems) dan tampilkan kesalahan. Untuk penambahan, gunakan crypto.randomUUID() sebagai ID sementara dan selaraskan dengan ID server setelah berhasil. Cegah kondisi balapan dengan menonaktifkan pemicu selama mutasi berlangsung. Pemulihan + notifikasi + coba lagi adalah pengalaman pengguna standar saat terjadi kegagalan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengimplementasikan Pembaruan Optimistis Secara Manual” gratis?
Ya — teks lengkap “Mengimplementasikan Pembaruan Optimistis Secara Manual” 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 “Mengimplementasikan Pembaruan Optimistis Secara Manual”?
Terapkan state optimistis secara lokal, antrekan mutasi, lalu tangani kasus berhasil dan gagal secara eksplisit. 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 2 dari 4.
Berapa lama pelajaran “Mengimplementasikan Pembaruan Optimistis Secara Manual” 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
- Apa Itu UI Optimistis dan Kapan Menggunakannya
- Mengimplementasikan Pembaruan Optimistis Secara Manual
- Pengembalian saat Kesalahan dan Penyelesaian Konflik
- Pola Optimistis dengan React Query dan Zustand