Lompat ke konten
Kembali ke modul

React: Membangun Antarmuka Pengguna · 5/9

Rendering, list, dan key

Bagaimana React menentukan apa yang berubah, dan kenapa key yang salah merusak list-mu.

Baca 28 menit

Setelah pelajaran ini kamu bisa

  • Menjelaskan apa yang terjadi antara perubahan state dan layar yang diperbarui
  • Menjelaskan apa yang dibandingkan reconciliation
  • Menjelaskan fungsi key, dan kenapa indeks biasanya salah
  • Mendiagnosis state yang menempel ke item list yang salah

Perubahan state tidak menyentuh DOM secara langsung. Tiga hal terjadi berurutan, dan mengetahui namanya membuat perilaku React bisa diprediksi.

  1. Trigger. Sebuah setter dipanggil, jadi React menjadwalkan pekerjaan untuk component ini.
  2. Render. React memanggil function component-mu untuk mendapatkan deskripsi baru. Belum ada apa pun di layar, dan langkah ini harus pure.
  3. Commit. React membandingkan deskripsi baru dengan yang lama lalu menerapkan hanya selisihnya ke DOM sungguhan.

Bagaimana reconciliation membandingkan

  • Type sama di posisi sama? Pertahankan node DOM-nya, perbarui hanya atribut yang berubah, dan pertahankan state-nya.
  • Type berbeda? Hancurkan subtree itu dan bangun yang baru. Semua state di dalamnya hilang.
  • Sebuah list? Cocokkan anak-anaknya berdasarkan key. Tanpa key, cocokkan berdasarkan posisi.

Key

Sebuah key memberi tahu React item mana di dalam list yang mana, antar render. Itulah cara React tahu sebuah item berpindah alih-alih berubah.

Coba sendiri

Hapus item pertama dari sebuah list, dicocokkan dua cara. Kolom state adalah yang dilihat pengguna di kotak input mereka.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

KeyPenilaian
key={item.id}Benar — stabil dan unik
key={item.slug}Benar, kalau slug-nya unik dan stabil
key={index}Hanya kalau list-nya tidak pernah diurut ulang, difilter, atau dihapus
key={Math.random()}Jangan pernah — key baru setiap render menghancurkan semuanya, setiap kali
Tanpa keySama dengan indeks, plus peringatan di console

Tugas praktik

Bangun bug-nya dengan sengaja. Render tiga input teks dari sebuah array memakai key={index}, ketik sesuatu yang berbeda di masing-masingnya, lalu hapus item pertamanya. Lihat teksnya bergeser naik satu baris. Ubah key-nya jadi id yang stabil lalu ulangi — sekarang teksnya ikut hilang bersama barisnya sendiri. Melakukan ini sekali berarti kamu akan selalu mengenalinya.

Hasil yang diharapkan

Teksnya terlihat bergeser baris dengan key indeks, dan tetap di tempatnya dengan key id.

Cek pemahaman

Sebuah list input teks memakai key={index}. Kamu menghapus item pertama. Apa yang dilihat pengguna?

Pilih jawaban dulu