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
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:
- Kita punya array
buahBuahan
yang isinya string nama-nama buah. buahBuahan.map((buah, index) => ...)
:- Kita manggil
.map()
di arraybuahBuahan
. - Fungsi callback-nya nerima dua argumen:
buah
(nilai elemen saat ini, misal "Apel") danindex
(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>
. Nilaikey
ini harus unik di antara saudara-saudaranya di dalem list itu. Di sini kita pakeindex
array sebagaikey
(tapi ada catatan soal ini, liat di bawah).
- Kita manggil
- Hasil dari
.map()
adalah sebuah array baru yang isinya elemen-elemen<li>
JSX:[ <li key={0}>Apel</li>, <li key={1}>Jeruk</li>, ... ]
- Di dalem JSX
<ul>
, kita tinggal sisipin arraylistItems
(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 pakekey
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:
- 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. - 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. - Sebaiknya Bukan Indeks Array (Kalau Urutan Item Bisa Berubah atau Item Bisa Dihapus/Ditambah di Tengah):
- Meskipun di contoh pertama kita pake
index
array sebagaikey
, 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 libraryuuid
kalau perlu).
- Meskipun di contoh pertama kita pake
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:
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?