0Pricing
React Academy · Pelajaran

useTransition untuk Pembaruan UI Non-Pemblokiran

Bungkus pembaruan status yang mahal dalam startTransition agar UI tetap responsif.

useTransition untuk Pembaruan UI Non-Pemblokiran 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.

Selamat Datang

Dalam pelajaran ini Anda akan menggunakan hook useTransition untuk menandai pembaruan status yang mahal sebagai tidak mendesak, sehingga antarmuka tetap responsif saat perenderan berat berlangsung di latar belakang.

Masalah Pembaruan yang Memblokir

Saat Anda mengetik di kotak pencarian yang menyaring daftar besar, React harus merender ulang seluruh daftar yang tersaring pada setiap penekanan tombol. Hal ini menghalangi masukan diperbarui segera, sehingga antarmuka terasa lamban.

Mode Konkuren React

React 18 memperkenalkan perenderan konkuren: React dapat mulai merender pembaruan status, menjedanya, lalu memprioritaskan pembaruan yang lebih mendesak, seperti pengetikan. useTransition adalah hook yang memungkinkan Anda menggolongkan pembaruan sebagai transisi berprioritas rendah.

Dasar-Dasar useTransition

useTransition mengembalikan `[isPending, startTransition]`. Bungkus pembaruan status yang tidak mendesak di dalam `startTransition()`. React akan memprioritaskan pembaruan lain, seperti masukan yang dikendalikan, di atas transisi tersebut.
const [isPending, startTransition] = useTransition();

const handleChange = (e) => {
  setInputValue(e.target.value); // urgent: update input immediately
  startTransition(() => {
    setFilteredList(filter(e.target.value)); // non-urgent
  });
};

isPending untuk Antarmuka Pemuatan

Saat transisi sedang diproses, `isPending` bernilai `true`. Gunakan ini untuk menampilkan indikator pemuatan atau meredupkan daftar hasil usang, sehingga pengguna mendapat umpan balik bahwa pembaruan sedang berlangsung.
return (
  <>
    <input value={inputValue} onChange={handleChange} />
    {isPending && <Spinner />}
    <ResultList items={filteredList} />
  </>
);

Apa yang Dimasukkan ke Dalam startTransition

Hanya letakkan pembaruan status di dalam startTransition — bukan operasi asinkron. Pembaruan status yang memicu perenderan mahal itulah yang Anda bungkus.
// Correct
startTransition(() => setTab('heavy'));

// Wrong — async work outside React state
startTransition(async () => { await fetch(...); }); // not supported

startTransition Tanpa Hook

Jika Anda tidak memerlukan `isPending`, Anda dapat mengimpor dan memanggil `startTransition` langsung dari React tanpa hook tersebut.
import { startTransition } from 'react';

startTransition(() => setQuery(newValue));

Contoh Perpindahan Tab

Kasus penggunaan umum: mengeklik tab akan mengganti komponen berat. Bungkus perubahan tab dalam startTransition agar indikator tab aktif segera diperbarui sementara komponen berat dirender di latar belakang.
const [tab, setTab] = useState('posts');
const [isPending, startTransition] = useTransition();

const selectTab = (t) =>
  startTransition(() => setTab(t));

useTransition vs useDeferredValue

Gunakan useTransition saat Anda OWN pembaruan status, yaitu Anda memanggil setState. Gunakan useDeferredValue saat Anda menerima properti atau nilai yang tidak dapat langsung Anda tunda — nilai itu sendiri yang ditunda.

Bukan Pengganti Optimasi

startTransition tidak membuat perenderan lebih cepat — hanya menundanya. Jika sebuah komponen memerlukan 500 md untuk dirender, prosesnya tetap memerlukan 500 md. Gabungkan dengan React.memo atau virtualisasi untuk daftar yang benar-benar lambat.

Pemeriksaan Singkat

Apa yang direpresentasikan oleh isPending dari useTransition?

Rangkuman

useTransition memungkinkan Anda menggolongkan pembaruan status sebagai transisi yang tidak mendesak. Pembaruan mendesak, seperti masukan, dirender segera; transisi dirender saat React memiliki kapasitas. Gunakan isPending untuk menampilkan umpan balik pemuatan.

Berikutnya

Pelajaran berikutnya: **useDeferredValue untuk Penundaan Masukan** — Anda akan menunda perenderan ulang bagian antarmuka yang lambat sambil menjaga masukan tetap sigap.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “useTransition untuk Pembaruan UI Non-Pemblokiran” gratis?

Ya — teks lengkap “useTransition untuk Pembaruan UI Non-Pemblokiran” 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 “useTransition untuk Pembaruan UI Non-Pemblokiran”?

Bungkus pembaruan status yang mahal dalam startTransition agar UI tetap responsif. 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 “useTransition untuk Pembaruan UI Non-Pemblokiran” 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. Kondisi Balapan & Pembersihan Effect
  2. useTransition untuk Pembaruan UI Non-Pemblokiran
  3. useDeferredValue untuk Penundaan Input
  4. Suspense untuk Batas Data & Kode
← Kembali ke React Academy