Pernah nggak kamu nemu form di website yang kalau diisi nama pakai angka, atau email tanpa "@", tetap bisa submit? Bikin frustrasi kan? Nah, masalah klasik ini adalah tanda bahwa developer-nya belum kenalan sama controlled component form validasi React. Di artikel ke-8 dari Seri Belajar React: React from Zero to Zorro ini, kita bakal bedah tuntas cara bikin form yang beneran ngejaga data kamu — bukan cuma tampang-tampangan doang. Kalau kamu udah baca artikel sebelumnya soal Fetch API dan Axios, sekarang saatnya data yang kamu ambil dari internet itu diproses dengan form yang bener!
Apa Itu Controlled Component? Analogi Kasir vs Self-Service
Bayangkan dua skenario belanja di supermarket. Pertama, kamu pakai mesin self-checkout: kamu scan sendiri, masukkin barang sendiri, dan kasir baru tahu totalnya setelah kamu selesai — tidak ada kontrol di tengah proses. Kedua, kamu antri di kasir manusia: setiap barang yang kamu taruh di ban berjalan langsung dicatat sistem, kalau ada yang mencurigakan kasir bisa langsung stop.
Nah, controlled component di React itu seperti kasir manusia. Setiap ketukan karakter di input field langsung "dilaporkan" ke React state. React yang pegang kendali penuh atas nilai form — bukan DOM browser. Ini berbeda dengan uncontrolled component yang membiarkan DOM mengatur nilainya sendiri (kayak self-checkout tadi).
Selalu pasangkan atribut value dengan onChange. Kalau kamu kasih value tanpa onChange, React akan membekukan input-mu — tidak bisa diketik sama sekali!
Membangun Form Lengkap dengan Controlled Component di React
Sekarang mari kita naik level. Kita bangun form registrasi sederhana dengan beberapa field: nama, email, dan password. Ikuti langkah-langkahnya satu per satu!
Siapkan State untuk Semua Field
Daripada bikin useState satu-satu, lebih rapi pakai satu objek state. Ini pattern yang sering dipakai di proyek nyata.
Buat Universal Change Handler
Satu handler untuk semua field — manfaatkan atribut name pada elemen HTML.
Hubungkan ke JSX Form
Pola [name]: value menggunakan Computed Property Names dari ES6. Ini salah satu alasan kenapa React developer wajib paham JavaScript modern — bukan cuma hafal syntax React-nya aja!
Validasi Input: Penjaga Gerbang Data di React
Form tanpa validasi itu seperti kasir supermarket yang nggak pernah scan barcode — siapapun bisa lolos dengan apa saja. Validasi di React bisa dilakukan di dua tempat: saat onChange (real-time) dan saat onSubmit (final check). Kita pakai keduanya!
Jangan lupakan e.preventDefault() di dalam handleSubmit! Tanpanya, form akan me-reload halaman setiap kali disubmit — dan semua state-mu akan hilang.
Controlled vs Uncontrolled: Pilih yang Mana untuk Form Validasi React?
React punya dua pendekatan untuk mengelola form. Mari kita bandingkan keduanya secara head-to-head supaya kamu bisa membuat keputusan yang tepat di proyek nyata.
| Aspek | ✅ Controlled Component | ⚠️ Uncontrolled Component |
|---|---|---|
| Kontrol nilai | React state (penuh) | DOM browser (ref) |
| Validasi real-time | ✔ Mudah & natural | ✘ Butuh kerja ekstra |
| Cocok untuk | Form kompleks, validasi ketat | Form sederhana, file upload |
| Boilerplate kode | Lebih banyak | Lebih sedikit |
| Rekomendasi React docs | ⭐ Direkomendasikan | Situasional |
Kapan pakai uncontrolled? Satu-satunya kasus yang benar-benar butuh uncontrolled adalah elemen <input type="file"> — karena nilainya read-only di DOM dan tidak bisa dikendalikan oleh React state. Untuk semua kasus lain, controlled component adalah pilihan yang lebih aman.
Di dunia nyata, banyak developer menggunakan library seperti React Hook Form atau Formik yang mengabstraksikan boilerplate controlled component. Tapi sebelum pakai library, memahami cara kerjanya dari bawah adalah fondasi yang wajib!
Validasi di client-side (React) berfungsi untuk memberikan feedback cepat ke user. Tapi ingat — validasi di sisi server tetap wajib! User bisa menonaktifkan JavaScript atau manipulasi request secara langsung. Dua lapis validasi = form yang beneran aman.
Form yang Proper = Controlled Component + Validasi Input React yang Solid
Kita sudah menempuh perjalanan panjang dari kasir supermarket sampai ke kode React! Berikut poin-poin yang wajib kamu bawa pulang:
- Controlled component berarti React state yang mengontrol nilai form, bukan DOM — dengan pasangan wajib
value+onChange. - Gunakan satu objek state + computed property key untuk mengelola banyak field sekaligus secara efisien.
- Validasi dilakukan di dua titik: real-time saat
onChangedan final check saatonSubmit. - Jangan lupa
e.preventDefault()dan validasi server-side sebagai lapis keamanan kedua.
🙋 Pertanyaan untuk kamu: Sudah coba bikin form dengan controlled component form validasi React sendiri? Share pengalaman atau pertanyaanmu di kolom komentar! Dan kalau artikel ini membantu, jangan ragu untuk share ke teman-teman yang lagi belajar React. Belajar bareng itu lebih seru! 🚀
React from Zero to Zorro
Artikel ini adalah bagian dari seri 16 artikel belajar React dari nol sampai mahir. Kamu bisa mengikuti seluruh seri dari awal melalui link di bawah!
🗂️ Lihat Daftar Isi Seri Lengkap
No comments:
Post a Comment