Introduction
Hai! Selamat datang di My Komponent Library. Ini adalah pustaka komponen UI yang dirancang untuk memudahkan kamu membangun antarmuka pengguna yang menarik dan responsif. Komponen di dalam pustaka ini dibuat dengan prinsip desain modern dan mengikuti praktik terbaik dalam pengembangan frontend.
Menurut React.dev, komponen adalah blok UI yang dapat digunakan kembali dan ditulis sebagai fungsi atau kelas. Komponen dapat menerima input melalui props
dan mengembalikan elemen React yang menjelaskan tampilan antarmuka.
Saat ini tersedia banyak pustaka UI populer seperti Chakra UI, Mantine, Ant Design, dan lainnya. Mereka menyediakan berbagai komponen siap pakai sehingga kamu bisa langsung menggunakannya sesuai kebutuhan.
Tapi, jika kamu membuat komponen sendiri, ada banyak keuntungan tambahan yang bisa didapatkan, lho!
Perbandingan: Buat Komponen Sendiri vs Pakai Library
Aspek | Buat Sendiri | Pakai Library |
---|---|---|
๐จ Kontrol Desain | 100% kamu yang atur | Tergantung fitur & tema bawaan |
โ๏ธ Performa | Ringan (jika dirancang baik) | Bisa berat karena banyak fitur bawaan |
๐ Fleksibilitas | Sangat fleksibel | Kadang terbatas pada API mereka |
๐งฑ Konsistensi UI | Harus kamu jaga sendiri | Sudah built-in dan konsisten |
๐ Waktu Pengembangan | Lebih lama | Lebih cepat karena komponen siap pakai |
๐งช Testing | Harus kamu uji sendiri | Sudah stabil dan battle-tested |
๐ฏ Learning Curve | Tidak perlu belajar API baru | Harus mempelajari struktur & props library |
Tapi jangan salah, membuat komponen sendiri juga memberikan banyak manfaat, lho! Seperti yang akan kita lihat berikut ini:
Manfaat Membuat Komponen Sendiri (Untuk Developer)
No | Manfaat | Penjelasan Singkat |
---|---|---|
1 | ๐ง Memahami UI Lebih Dalam | Belajar membangun UI dari nol, termasuk struktur, perilaku, dan aksesibilitas. |
2 | ๐ ๏ธ Meningkatkan Skill Frontend | Melatih pola pikir 'thinking in components' yang penting untuk technical test. |
3 | ๐ผ Portfolio Kuat dan Unik | Menjadi nilai tambah saat melamar kerja dan bisa dipakai ulang di proyek lain. |
4 | ๐งฉ Fleksibilitas Tanpa Batas | Tidak terikat oleh batasan library atau desain yang sudah jadi. |
5 | ๐งช Belajar Testing | Komponen kecil cocok untuk latihan unit testing maupun integration testing. |
6 | ๐ง Mandiri dan Adaptif | Meningkatkan pemahaman dasar sehingga tidak bergantung pada framework. |
Sekarang, mari kita mulai dari awal untuk membangun komponen kita sendiri. Aku juga akan membagikan beberapa contoh penggunaannya agar kamu bisa langsung mencoba dan memahami konsepnya dengan mudah.
1. Tailwind CSS
Sebelum membuat komponen UI yang bisa dipakai ulang, kita mulai dulu dari Tailwind CSS. Tailwind adalah utility-first CSS framework yang memungkinkan kita membangun desain antarmuka langsung di dalam elemen HTML atau JSX dengan class-class seperti px-4
, text-center
, bg-blue-500
, dan sebagainya.
Tailwind membuat kita bisa mendesain UI dengan cepat tanpa harus menulis CSS secara manual. Tapi, ketika komponen makin kompleks, kita akan sering menulis class secara dinamis. Nah, di sinilah clsx
dan tailwind-merge
sangat berguna โ dan akan dibahas di poin berikutnya. silahkan install tailwind terlebih dulu dengan mengunjungi website nya Tailwind Css
2. clsx
dan tailwind-merge
Mengapa kita membutuhkan clsx
dan tailwind-merge
? Karena saat membangun komponen UI yang fleksibel, sering kali kita perlu mengatur class Tailwind secara dinamis berdasarkan kondisi tertentu.clsx
membantu kita menggabungkan class secara kondisional dengan cara yang rapi dan efisien. Sementara itu, tailwind-merge
berguna untuk menyatukan class Tailwind yang mungkin saling bertentangan (seperti p-2
dan p-4
), sehingga hanya class terakhir yang relevan yang akan digunakan.
Code:
1npm install clsx tailwind-merge
Jika sudah, Sekarang kita buka VScode nya
Buat fungsi ini. tujuan nya adalah Menyederhanakan dan menstandarkan cara menggabungkan className di seluruh komponen React, supaya lebih bersih, fleksibel, dan bebas bug konflik class Tailwind.
lib/utils.ts
1export function Twc(...inputs: ClassValue[]) {
2 return twMerge(clsx(inputs));
3}