Skip to main content

Rendering List

Rendering List dengan for:each​

Metode utama untuk rendering list di LWC adalah menggunakan direktif for:each. Ini memungkinkan Anda untuk mengiterasi array dan merender elemen untuk setiap item.

<template>
<ul>
<template for:each={contacts} for:item="contact">
<li key={contact.Id}>{contact.Name}</li>
</template>
</ul>
</template>
import { LightningElement, track } from 'lwc';

export default class ContactList extends LightningElement {
@track contacts = [
{ Id: '001', Name: 'John Doe' },
{ Id: '002', Name: 'Jane Smith' },
{ Id: '003', Name: 'Bob Johnson' }
];
}

Catatan: Atribut key sangat penting untuk performa dan rendering yang benar. Key harus unik untuk setiap item dalam list.

Mengakses Index​

Jika Anda perlu mengakses index item dalam list, Anda bisa menggunakan for:index:

<template>
<ul>
<template for:each={contacts} for:item="contact" for:index="index">
<li key={contact.Id}>
{index}: {contact.Name}
</li>
</template>
</ul>
</template>

Conditional Rendering dalam List​

Anda bisa menggabungkan conditional rendering dengan list rendering:

<template>
<ul>
<template for:each={contacts} for:item="contact">
<li key={contact.Id}>
{contact.Name}
<template if:true={contact.IsActive}>
(Active)
</template>
</li>
</template>
</ul>
</template>

Rendering List Kompleks​

Untuk list yang lebih kompleks, Anda mungkin ingin menggunakan komponen child untuk setiap item:

<!-- parentComponent.html -->
<template>
<ul>
<template for:each={contacts} for:item="contact">
<c-contact-item key={contact.Id} contact={contact}></c-contact-item>
</template>
</ul>
</template>

<!-- contactItem.html -->
<template>
<li>
<div>{contact.Name}</div>
<div>{contact.Email}</div>
</li>
</template>

Handling Events dalam List​

Ketika bekerja dengan list, Anda sering perlu menangani events untuk item individu:

<template>
<ul>
<template for:each={contacts} for:item="contact">
<li key={contact.Id}>
{contact.Name}
<button onclick={handleClick} data-id={contact.Id}>View Details</button>
</li>
</template>
</ul>
</template>
handleClick(event) {
const contactId = event.target.dataset.id;
// Lakukan sesuatu dengan contactId
}

Sorting dan Filtering​

Seringkali Anda perlu mengurutkan atau memfilter list sebelum merender:

get sortedContacts() {
return [...this.contacts].sort((a, b) => a.Name.localeCompare(b.Name));
}

get activeContacts() {
return this.contacts.filter(contact => contact.IsActive);
}

Kemudian, gunakan getter ini dalam template Anda:

<template>
<h2>Sorted Contacts</h2>
<ul>
<template for:each={sortedContacts} for:item="contact">
<li key={contact.Id}>{contact.Name}</li>
</template>
</ul>
<h2>Active Contacts</h2>
<ul>
<template for:each={activeContacts} for:item="contact">
<li key={contact.Id}>{contact.Name}</li>
</template>
</ul>
</template>

Handling Empty Lists​

Penting untuk menangani kasus ketika list kosong:

<template>
<template if:true={contacts.length}>
<ul>
<template for:each={contacts} for:item="contact">
<li key={contact.Id}>{contact.Name}</li>
</template>
</ul>
</template>
<template if:false={contacts.length}>
<p>No contacts found.</p>
</template>
</template>

Dengan menggunakan teknik-teknik ini, Anda dapat membuat komponen LWC yang efektif dan efisien dalam menangani dan menampilkan data list.