FluentStack

Optimistic UI Basics

Mode tersedia: dark, light, paper
MasukDaftar
Advanced · Level 12: Forms, Validation, and Data FetchingAdvanced70 menitBahasa Indonesia

Optimistic UI Basics

Memilih optimistic update yang aman dan memulihkan UI ketika server menolak perubahan.

StatusMemuat progres
ProgresMemuat...

...

Memuat progres

Menyiapkan langkah berikutnya

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
Optimistic UIServer StateError RecoveryReact

Isi lesson

6 blok
  1. 1.
    Optimistic berarti UI bergerak sebelum jawaban server datangBelum selesaiWajib
  2. 2.
    Bookmark course dengan rollback sederhanaBelum selesaiWajib
  3. 3.
    Coding practiceBelum selesaiWajib
  4. 4.
    Cek pemahamanBelum selesaiWajib
  5. 5.
    Rollback bukan detail opsionalBelum selesaiWajib
  6. 6.
    RingkasanBelum selesaiWajib

Optimistic berarti UI bergerak sebelum jawaban server datang

Wajib

Pada 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

Wajib
tsx
import { 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 khusus

Add 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.

5 cek otomatis5 checklist
Belum selesaiBuka practice

Cek pemahaman

WajibJawab dulu

Cek pemahaman singkat

Manakah use case yang paling aman untuk optimistic UI dasar?

Progres lesson naik setelah jawaban benar.

Peringatan

Wajib

Rollback 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.