Tabel
Di halaman ini
Berikan columns dan rows dan tabelnya membangun dirinya sendiri, lengkap dengan kepalanya. Ia dibungkus wadah gulir mendatar, jadi tabel dengan lebih banyak kolom daripada yang bisa ditampilkan ponsel akan bergulir sendiri alih-alih meregangkan halamannya. Diekspor sebagai table sekaligus dataTable.
Tabel dasar
| Halaman | Ukuran | Waktu render |
|---|---|---|
| / | 4,1 kB | 12 ms |
| /docs | 12,7 kB | 31 ms |
| /examples | 9,4 kB | 24 ms |
table({
columns: [
{ key: 'page', header: 'Halaman' },
{ key: 'size', header: 'Ukuran' },
{ key: 'time', header: 'Waktu render' },
],
rows: [
{ page: '/', size: '4,1 kB', time: '12 ms' },
{ page: '/docs', size: '12,7 kB', time: '31 ms' },
{ page: '/examples', size: '9,4 kB', time: '24 ms' },
],
})Perataan
Angka lebih enak dibaca ketika diratakan ke ujung kolomnya.
| Halaman | Bita | Gzip |
|---|---|---|
| / | 4.112 | 1.204 |
| /docs | 12.704 | 3.910 |
| /examples | 9.388 | 2.744 |
table({
columns: [
{ key: 'page', header: 'Halaman' },
{ key: 'bytes', header: 'Bita', align: 'end' },
{ key: 'gzip', header: 'Gzip', align: 'end' },
],
rows: [
{ page: '/', bytes: '4.112', gzip: '1.204' },
{ page: '/docs', bytes: '12.704', gzip: '3.910' },
{ page: '/examples', bytes: '9.388', gzip: '2.744' },
],
})Sel khusus
Kolom dengan fungsi render menerima seluruh barisnya dan mengembalikan apa pun yang seharusnya ada di selnya — sebuah chip, tautan, atau angka terformat.
| Halaman | Ukuran | Status |
|---|---|---|
| /docs/routing | 18,2 kB | oke |
| /docs/data | 21,7 kB | oke |
| /docs/islands | 24,1 kB | gagal |
table({
columns: [
{ header: 'Halaman', render: (row) => link({ href: row.href }, row.page) },
{ key: 'size', header: 'Ukuran', align: 'end' },
{ header: 'Status', align: 'end', render: (row) =>
chip({ size: 'sm', dot: true, color: row.ok ? 'success' : 'danger' }, row.ok ? 'oke' : 'gagal') },
],
rows: [
{ page: '/docs/routing', href: '/docs/routing', size: '18,2 kB', ok: true },
{ page: '/docs/data', href: '/docs/data', size: '21,7 kB', ok: true },
{ page: '/docs/islands', href: '/docs/islands', size: '24,1 kB', ok: false },
],
})Gaya
striped memberi pita berselang-seling pada barisnya, hover menyoroti baris di bawah penunjuk, dan dense merapatkan bantalannya untuk tabel dengan banyak baris.
| Nama | Nilai |
|---|---|
| halaman | 169 |
| aset | 208 |
| total | 9,5 MB |
| Nama | Nilai |
|---|---|
| halaman | 169 |
| aset | 208 |
| total | 9,5 MB |
stack({ gap: 'lg' },
table({
striped: true,
caption: 'berpita',
columns: [{ key: 'name', header: 'Nama' }, { key: 'value', header: 'Nilai', align: 'end' }],
rows: [{ name: 'halaman', value: '169' }, { name: 'aset', value: '208' }, { name: 'total', value: '9,5 MB' }],
}),
table({
hover: true,
dense: true,
caption: 'sorot dan rapat',
columns: [{ key: 'name', header: 'Nama' }, { key: 'value', header: 'Nilai', align: 'end' }],
rows: [{ name: 'halaman', value: '169' }, { name: 'aset', value: '208' }, { name: 'total', value: '9,5 MB' }],
}),
)Keterangan
Keterangan menamai tabelnya bagi siapa pun yang sampai ke sana tanpa teks di sekitarnya — layak ditambahkan setiap kali tabelnya tidak berada langsung di bawah judul yang sudah menyatakan isinya.
| Commit | Kapan | Halaman |
|---|---|---|
| 94a837a | 4 menit lalu | 169 |
| dcfaaae | 2 jam lalu | 161 |
table({
caption: 'Keluaran build, terbaru lebih dulu',
columns: [
{ key: 'commit', header: 'Commit' },
{ key: 'when', header: 'Kapan' },
{ key: 'pages', header: 'Halaman', align: 'end' },
],
rows: [
{ commit: '94a837a', when: '4 menit lalu', pages: '169' },
{ commit: 'dcfaaae', when: '2 jam lalu', pages: '161' },
],
})Dari data
Barisnya adalah larik biasa, jadi biasanya ia adalah apa pun yang sudah dimuat data() — tanpa adaptor di antaranya.
| Pos | Terbit | Dibaca |
|---|---|---|
| Halo dunia | 2026-01-14 | 1.204 |
| Statis dulu | 2026-02-02 | 890 |
| Tanpa runtime | 2026-03-19 | 2.317 |
return (() => {
const posts = [
{ title: 'Halo dunia', date: '2026-01-14', reads: 1204 },
{ title: 'Statis dulu', date: '2026-02-02', reads: 890 },
{ title: 'Tanpa runtime', date: '2026-03-19', reads: 2317 },
]
return table({
hover: true,
columns: [
{ key: 'title', header: 'Pos' },
{ key: 'date', header: 'Terbit' },
{ header: 'Dibaca', align: 'end', render: (post) => post.reads.toLocaleString('id') },
],
rows: posts,
})
})()Menulis markup-nya sendiri
Lewati columns dan tabelnya justru merender anaknya, jadi tabel dengan baris kaki atau kepala berkelompok bisa dibangun manual dan tetap mendapat penataan serta wadah gulirnya.
Props
| Prop | Tipe | Bawaan | Deskripsi |
|---|---|---|---|
columns | TableColumn[] | — | { key, header, align, render } per kolom. Lewati untuk menulis barisnya sendiri. |
rows | object[] | [] | Satu objek per baris. |
caption | Child | — | Keterangan di atas tabelnya. |
striped | boolean | false | Memberi pita berselang-seling pada barisnya. |
hover | boolean | false | Menyoroti baris di bawah penunjuk. |
dense | boolean | false | Bantalan sel yang lebih rapat. |