Membuat Fitur Pencarian Sederhana di Svelte
Svelte punya fitur reactivity yang bikin update data jadi otomatis tanpa boilerplate.
Dalam artikel ini kita akan membuat pencarian produk sederhana: ketika user mengetik di input, hasil pencarian langsung muncul di bawahnya.
1. Kode Lengkap
Buat file src/routes/+page.svelte
:
<script lang="ts">
let query = "";
let products = ["Laptop", "Mouse", "Keyboard", "Monitor", "Printer"];
let results: string[] = [];
function searchProducts(q: string) {
if (q.trim() === "") {
results = [];
} else {
results = products.filter((p) =>
p.toLowerCase().includes(q.toLowerCase())
);
}
}
// Reactive statement: jalan otomatis tiap kali query berubah
$: searchProducts(query);
</script>
<input bind:value={query} placeholder="Cari produk..." />
<ul>
{#if query.trim() !== ""}
{#if results.length > 0}
{#each results as item}
<li>{item}</li>
{/each}
{:else}
<li>Tidak ada hasil</li>
{/if}
{/if}
</ul>
2. Penjelasan
Beberapa bagian penting:
-
State
let query = ""; let products = ["Laptop", "Mouse", "Keyboard", "Monitor", "Printer"]; let results: string[] = [];
query
menyimpan teks pencarian,products
adalah data statis, danresults
hasil filter. -
Fungsi pencarian
function searchProducts(q: string) { if (q.trim() === "") { results = []; } else { results = products.filter((p) => p.toLowerCase().includes(q.toLowerCase()) ); } }
Jika input kosong → hasil di-reset. Jika ada → filter produk berdasarkan query.
-
Reactive statement (
$:
)$: searchProducts(query);
Setiap kali
query
berubah, fungsisearchProducts
otomatis dijalankan. Tidak perluuseEffect
atau event listener manual. -
Template
<input bind:value={query} placeholder="Cari produk..." />
Binding langsung antara input dan variabel
query
.{#if results.length > 0} {#each results as item} <li>{item}</li> {/each} {:else} <li>Tidak ada hasil</li> {/if}
Menampilkan daftar produk yang cocok, atau pesan fallback jika tidak ada.
3. Hasil
- Ketik
lap
→ hasil menampilkan Laptop. - Ketik
mo
→ hasil menampilkan Mouse dan Monitor. - Ketik teks yang tidak cocok → muncul pesan Tidak ada hasil.
- Kosongkan input → hasil pencarian hilang.
Kesimpulan
Dengan reactive statement di Svelte, membuat fitur seperti pencarian jadi super sederhana:
- Tidak perlu manual pasang event listener.
- Tidak perlu state management rumit.
- Data di UI otomatis sinkron dengan variabel.
Konsep yang sama bisa dipakai untuk live search dari API, filter tabel, atau bahkan autocomplete.