K

Command Palette

Search for a command to run...

Daftar

Merender List & Keys di React

Pelajari cara efisien untuk menampilkan kumpulan data (array) sebagai list elemen JSX di React menggunakan metode `.map()`, dan pahami mengapa atribut `key` unik sangat penting untuk performa dan stabilitas.

Nampilin Banyak Data Sekaligus: Jurus .map() dan key Prop di React!

Seringkali, aplikasi web kita perlu nampilin daftar (list) dari banyak item data. Misalnya, daftar produk di toko online, daftar postingan di blog, daftar tugas di to-do list, atau daftar nama teman.

Gimana caranya kita "ngubah" array data JavaScript (misalnya, array of strings atau array of objects) jadi sekumpulan elemen JSX yang bisa ditampilin di halaman? Di React, cara paling umum dan elegan buat ngelakuin ini adalah pake metode array JavaScript .map().

Dan pas kita ngerender list, ada satu atribut spesial yang super penting: key prop.

Menggunakan Metode .map() untuk Merender List

Kamu pasti inget kan metode array .map() dari pelajaran JavaScript dasar?

  • .map() itu dipake buat ngiterasi (nge-loop) tiap elemen di sebuah array.
  • Buat tiap elemen itu, dia bakal ngejalanin fungsi callback yang kita kasih.
  • Terus, dia bakal ngumpulin hasil return dari tiap panggilan fungsi callback itu jadi sebuah array BARU.

Nah, di React, kita manfaatin ini buat "transformasi" array data jadi array elemen JSX!

Contoh Sederhana: Nampilin Daftar Nama Buah

jsx
import React from 'react';
 
function DaftarBuah() {
  const buahBuahan = ["Apel", "Jeruk", "Mangga", "Pisang", "Anggur"];
 
  // Pake .map() buat ngubah tiap nama buah jadi elemen <li>
  const listItems = buahBuahan.map((buah, index) => 
    // PENTING: perhatiin atribut 'key' di sini!
    <li key={index}>{buah}</li> 
  );
 
  return (
    <div>
      <h2>Daftar Buah Favorit:</h2>
      <ul>
        {listItems} {/* Render array elemen JSX di sini */}
      </ul>
    </div>
  );
}
 
// Bisa juga .map() langsung di dalem JSX:
function DaftarBuahRingkes() {
  const buahBuahan = ["Apel", "Jeruk", "Mangga", "Pisang", "Anggur"];
  return (
    <div>
      <h2>Daftar Buah (Versi Ringkes):</h2>
      <ul>
        {buahBuahan.map((buah, index) => (
          <li key={index}>{buah}</li>
        ))}
      </ul>
    </div>
  );
}
 
function App() {
  return (
    <>
      <DaftarBuah />
      <hr />
      <DaftarBuahRingkes />
    </>
  );
}
 
export default App;

Penjelasan:

  1. Kita punya array buahBuahan yang isinya string nama-nama buah.
  2. buahBuahan.map((buah, index) => ...):
    • Kita manggil .map() di array buahBuahan.
    • Fungsi callback-nya nerima dua argumen: buah (nilai elemen saat ini, misal "Apel") dan index (posisi elemen itu di array, 0, 1, 2, ...).
    • Buat tiap buah, fungsi callback ini nge-return sebuah elemen JSX <li> yang isinya nama buah itu.
    • Yang paling penting, kita ngasih prop key ke tiap elemen <li>. Nilai key ini harus unik di antara saudara-saudaranya di dalem list itu. Di sini kita pake index array sebagai key (tapi ada catatan soal ini, liat di bawah).
  3. Hasil dari .map() adalah sebuah array baru yang isinya elemen-elemen <li> JSX: [ <li key={0}>Apel</li>, <li key={1}>Jeruk</li>, ... ]
  4. Di dalem JSX <ul>, kita tinggal sisipin array listItems (atau hasil .map() langsung) pake kurung kurawal {}. React pinter, dia bakal ngerender tiap elemen JSX di dalem array itu jadi elemen <li> beneran di DOM.

Pentingnya key Prop: "KTP" Buat Tiap Item List!

Setiap kali kamu ngerender daftar elemen pake .map() (atau loop lain) di React, kamu WAJIB ngasih key prop yang unik ke tiap elemen terluar di dalem loop itu (di contoh kita, elemen <li>).

Kenapa key itu penting banget?

  • Membantu React Mengidentifikasi Item: key ini kayak "nomor KTP" atau "sidik jari" buat tiap item di list. React pake key ini buat ngenalin item mana yang berubah, ditambah, atau dihapus pas data di array-nya berubah dan list-nya perlu di-update (re-render).
  • Efisiensi Update DOM: Dengan key yang stabil dan unik, React bisa lebih efisien pas nge-update DOM. Dia bisa tau persis item mana yang perlu diganti, dipindahin, atau dihapus, daripada harus ngebangun ulang seluruh list dari awal. Ini ningkatin performa, apalagi buat list yang panjang atau sering berubah.
  • Menjaga State Komponen Child (kalau itemnya komponen): Kalau item list-mu itu komponen React lain yang punya state sendiri, key yang stabil itu penting biar state komponen itu gak "ilang" atau "ketuker" pas urutan item di list berubah.

Aturan buat key prop:

  1. Harus Unik di Antara Saudara-saudaranya (Siblings): key gak perlu unik secara global di seluruh aplikasi, tapi harus unik di dalem satu set list item yang lagi dirender barengan itu.
  2. Harus Stabil: Nilai key buat satu item data tertentu idealnya gak berubah-ubah antar render, kecuali kalau item data itu emang bener-bener item yang beda.
  3. Sebaiknya Bukan Indeks Array (Kalau Urutan Item Bisa Berubah atau Item Bisa Dihapus/Ditambah di Tengah):
    • Meskipun di contoh pertama kita pake index array sebagai key, ini gak selalu ide bagus, apalagi kalau:
      • Urutan item di array-mu bisa berubah (misal, di-sort ulang).
      • Kamu bisa nambahin atau ngapus item dari tengah-tengah array.
    • Kenapa? Kalau key pake indeks, terus kamu hapus item di tengah, indeks item-item setelahnya bakal geser. React bisa jadi salah ngira kalau item yang geser itu item yang sama tapi datanya berubah, padahal sebenernya itemnya beda. Ini bisa nyebabin bug aneh atau state komponen child jadi gak konsisten.
    • Solusi Terbaik: Kalau data di array-mu punya ID unik (misalnya, ID produk dari database, ID postingan), pake ID unik itu sebagai key! Ini pilihan yang paling aman dan stabil.
      jsx
      const produk = [
        { id: 'p1', nama: 'Laptop', harga: 15000000 },
        { id: 'p2', nama: 'Mouse', harga: 200000 },
        { id: 'p3', nama: 'Keyboard', harga: 500000 }
      ];
       
      // ...
      <ul>
        {produk.map(item => (
          <li key={item.id}> {/* Pake item.id sebagai key */}
            {item.nama} - Rp {item.harga}
          </li>
        ))}
      </ul>
    • Kalau bener-bener gak ada ID unik dan urutan itemnya dijamin gak bakal berubah sama sekali, baru deh index bisa jadi pilihan terakhir (tapi tetep waspada). Atau, kamu bisa coba generate ID unik sementara di sisi klien (misal, pake library uuid kalau perlu).

Apa yang Terjadi kalau Lupa Ngasih key? React bakal ngasih warning di konsol yang ngingetin kamu buat nambahin key prop. Meskipun aplikasimu mungkin masih jalan, performanya bisa jadi gak optimal dan bisa ada bug aneh pas data list-nya berubah. Jadi, jangan diabaikan ya warning itu!

Merender List Komponen

Kamu juga bisa ngerender daftar dari komponen React lain:

jsx
import React from 'react';
 
// Komponen child buat nampilin satu tugas
function ItemTugas({ id, teksTugas, sudahSelesai }) {
  return (
    <li style={{ textDecoration: sudahSelesai ? 'line-through' : 'none' }}>
      {teksTugas}
    </li>
  );
}
 
function DaftarTugas() {
  const daftarSemuaTugas = [
    { id: 'tgs1', teks: 'Belajar React Props', selesai: true },
    { id: 'tgs2', teks: 'Belajar React State', selesai: true },
    { id: 'tgs3', teks: 'Belajar Render List', selesai: false },
    { id: 'tgs4', teks: 'Bikin Proyek Keren', selesai: false }
  ];
 
  return (
    <div>
      <h2>Tugas-Tugasku:</h2>
      <ul>
        {daftarSemuaTugas.map(tugas => (
          // PENTING: key ditaruh di elemen terluar yang di-return dari .map()
          // Dalam hal ini, di komponen ItemTugas itu sendiri
          <ItemTugas 
            key={tugas.id} // Pake ID unik dari data tugas sebagai key
            id={tugas.id} // Kirim id sebagai prop biasa kalau dibutuhin di dalem ItemTugas
            teksTugas={tugas.teks} 
            sudahSelesai={tugas.selesai} 
          />
        ))}
      </ul>
    </div>
  );
}
 
export default DaftarTugas;

Di sini, key prop ditaruh di komponen <ItemTugas /> karena itu elemen terluar yang kita buat di dalem .map().


Metode .map() dan key prop ini adalah pasangan yang gak terpisahkan buat nampilin daftar data di React. Dengan cara ini, kamu bisa ngebangun UI yang dinamis dan efisien buat nampilin koleksi data apa pun, dari yang simpel sampe yang kompleks.

Ingat baik-baik soal pentingnya key yang unik dan stabil, ya! Ini bakal nyelametin kamu dari banyak potensi bug dan masalah performa.


Kuis Merender List & Keys di ReactJS

Pertanyaan 1 dari 4

Metode array JavaScript apa yang paling umum digunakan di React untuk mengubah array data menjadi array elemen JSX yang bisa dirender sebagai list?