Optimistic UI Basics
Memilih optimistic update yang aman dan memulihkan UI ketika server menolak perubahan.
Tujuan belajar
- Menjelaskan optimistic UI sebagai perubahan sebelum konfirmasi server
- Memilih interaction kecil yang memiliki recovery path jelas
- Menyimpan nilai sebelumnya untuk rollback saat request gagal
- Membedakan optimistic update dari operasi yang perlu konfirmasi server dulu
Isi lesson
6 blok- 1.Optimistic berarti UI bergerak sebelum jawaban server datangBelum selesaiWajib
- 2.Bookmark course dengan rollback sederhanaBelum selesaiWajib
- 3.Coding practiceBelum selesaiWajib
- 4.Cek pemahamanBelum selesaiWajib
- 5.Rollback bukan detail opsionalBelum selesaiWajib
- 6.RingkasanBelum selesaiWajib
Optimistic berarti UI bergerak sebelum jawaban server datang
WajibPada optimistic update, UI segera menampilkan hasil yang diharapkan lalu mengirim mutation ke server. Pattern ini cocok untuk action kecil, cepat, dan mudah dibalik, misalnya bookmark course atau menandai notifikasi sudah dibaca. Karena server tetap sumber kebenaran, setiap optimistic update harus punya rencana ketika request gagal: kembalikan nilai sebelumnya, jelaskan apa yang terjadi, dan beri action recovery bila diperlukan.
Jangan memakai optimism hanya agar UI tampak cepat. Pembayaran, perubahan permission, penghapusan penting, atau mutation dengan banyak efek server dapat lebih aman menunggu konfirmasi. Sebelum menulis setState, jawab tiga pertanyaan: apa nilai sebelumnya, bagaimana rollback dilakukan, dan bagaimana UI kembali sinkron jika server memberi hasil berbeda.
Bagian ini memengaruhi progres lesson.
Bookmark course dengan rollback sederhana
Wajibimport { useState } from "react";
type Course = {
id: string;
title: string;
isBookmarked: boolean;
};
async function updateBookmark(id: string, isBookmarked: boolean) {
return { id, isBookmarked };
}
export function CourseBookmark({ initialCourse }: { initialCourse: Course }) {
const [course, setCourse] = useState(initialCourse);
const [message, setMessage] = useState<string | undefined>(undefined);
async function toggleBookmark() {
const previousCourse = course;
const nextCourse = {
...course,
isBookmarked: !course.isBookmarked,
};
setCourse(nextCourse);
setMessage(undefined);
try {
await updateBookmark(nextCourse.id, nextCourse.isBookmarked);
} catch {
setCourse(previousCourse);
setMessage("Bookmark belum diperbarui. Coba lagi.");
}
}
return (
<div>
<button type="button" onClick={toggleBookmark}>
{course.isBookmarked ? "Hapus bookmark" : "Simpan bookmark"}
</button>
{message ? <p role="alert">{message}</p> : null}
</div>
);
}previousCourse disimpan sebelum UI berubah. Jika updateBookmark gagal, rollback memulihkan nilai awal dan message menjelaskan recovery. Contoh ini belum menangani klik cepat, request yang selesai tidak berurutan, refresh, atau conflict dari server. Jangan memperluas pattern ini sebelum flow kecilnya diuji pada endpoint nyata.
Bagian ini memengaruhi progres lesson.
Coding practice
WajibDibuka di workspace khususAdd optimistic course bookmark rollback
Tambahkan optimistic bookmark update yang menyimpan nilai sebelumnya, rollback saat gagal, dan memberi recovery copy. Preview tidak mengirim mutation bookmark.
Tujuan awal: Fokus di tab TSX.
Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.
Tombol selesai aktif setelah semua validasi wajib lolos.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Manakah use case yang paling aman untuk optimistic UI dasar?
Progres lesson naik setelah jawaban benar.
Peringatan
WajibRollback bukan detail opsional
Jika kamu tidak dapat menjelaskan nilai mana yang dipulihkan ketika mutation gagal, interaction itu belum siap dibuat optimistic. Untuk daftar data yang dapat berubah cepat, pertimbangkan request yang tumpang tindih, response terlambat, dan re-fetch setelah mutation. Query library dapat membantu mengelola kasus berulang, tetapi tidak menggantikan keputusan produk tentang kapan optimism aman.
Bagian ini memengaruhi progres lesson.
Ringkasan
Wajib- Optimistic UI memperbarui tampilan sebelum server mengonfirmasi mutation.
- Pilih action kecil, predictable, dan mudah dibalik untuk pattern awal.
- Simpan nilai sebelumnya, rollback saat gagal, dan beri recovery copy yang jelas.
- Operasi berisiko atau kompleks sering lebih aman menunggu konfirmasi server.
- Berikutnya, Uji Kompetensi menyatukan klasifikasi state, UI state, mapping, serta recovery optimistic update.
Bagian ini memengaruhi progres lesson.
Langkah berikutnya
Selesaikan bagian penting lesson ini
Lanjutkan blok wajib berikutnya: Optimistic berarti UI bergerak sebelum jawaban server datang.