Ngulik component di ReactJS harus mulai dari mana sih buat kamu?
Halo, kamu yang lagi asyik ngulik atau baru mau nyentuh dunia development web modern! Pasti udah sering denger dong nama ReactJS? Framework JavaScript dari Facebook (sekarang Meta) ini emang lagi nge-hit banget dan dipakai di mana-mana, mulai dari startup keren sampai perusahaan besar. Nah, kalau ngomongin React, pasti nggak bisa lepas dari yang namanya component. Ibaratnya, component itu adalah jantungnya React. Tapi buat kamu yang baru mulai, mungkin ngerasa agak bingung, "Oke, React itu component based, tapi komponen itu apa sih sebenarnya, dan harus mulai dari mana belajarnya biar nggak nyasar?". Tenang aja, kamu nggak sendirian kok. Artikel ini dibuat khusus buat nemenin kamu 'ngulik' component di ReactJS dari nol, step by step, dengan bahasa yang santai tapi tetap berisi.
React itu punya filosofi yang keren banget: bangun User Interface (UI) kamu pakai potongan-potongan kecil yang namanya component. Bayangin aja kamu lagi main LEGO. Kamu nggak langsung bikin kapal gede utuh kan? Pasti mulai dari nyusun balok-balok kecil, digabungin jadi bagian-bagian yang lebih besar (kayak sayap, badan kapal), sampai akhirnya jadi satu kapal utuh. Nah, component di React itu persis kayak balok LEGO itu. Setiap component itu adalah bagian mandiri dari UI kamu, bisa berupa tombol, form input, header, footer, atau bahkan satu halaman penuh.
Kenapa sih component ini penting banget?
- Reusability: Component itu bisa dipakai berulang kali di banyak tempat dalam aplikasi kamu. Bikin sekali, pakai di mana-mana. Hemat waktu dan bikin kode lebih bersih.
- Maintainability: Kalau ada bug atau mau nambah fitur di satu bagian UI, kamu cuma perlu fokus ke component itu aja. Nggak perlu ngoprek seluruh kode aplikasi. Gampang di-maintain.
- Readability: Kode jadi lebih terstruktur dan mudah dibaca, karena setiap component punya tugas spesifiknya sendiri. Developer lain (atau kamu sendiri di masa depan) bakal lebih gampang paham alur kode kamu.
- Scalability: Dengan memecah UI jadi component-component kecil, aplikasi kamu bakal lebih mudah dikembangkan menjadi lebih besar dan kompleks tanpa jadi kacau.
Jadi, intinya, menguasai component adalah kunci utama buat kamu yang mau serius belajar ReactJS.
Mau Mulai dari Mana Ngulik Component React? Ini Roadmap-nya Buat Kamu!
Oke, sekarang udah paham kan pentingnya component? Langsung aja kita bedah, apa aja yang perlu kamu pelajari pertama kali:
1. Pahami Konsep Dasar Component (Functional vs Class)
Dulu banget waktu React awal-awal populer, ada dua cara utama bikin component: pakai class
(Class Components) atau pakai function
(Functional Components). Seiring perkembangan React dan dikenalkannya Hooks (React v16.8), Functional Components jadi jauh lebih powerful dan cleaner. Sekarang ini, hampir semua developer React yang baru atau yang mengupdate kodenya, lebih milih pakai Functional Components.
- Functional Components: Ini adalah function JavaScript biasa yang me-
return
JSX (nanti kita bahas JSX ya!). Component ini lebih ringkas, mudah dibaca, dan gampang di-test. Dengan adanya Hooks (kayakuseState
,useEffect
), Functional Components bisa punya fitur-fitur yang tadinya cuma ada di Class Components (kayak state dan lifecycle methods). - Class Components: Ini adalah class JavaScript yang meng-extend
React.Component
. Component ini punya method kayakrender()
,componentDidMount()
, dll. Dulu ini cara utama buat component yang punya state atau perlu lifecycle methods. Tapi sekarang, ini udah jarang banget dipakai buat project baru, kecuali kalau kamu maintenance project lama.
Tips buat pemula: Fokus aja dulu ke Functional Components. Pelajari Class Components nanti kalau emang perlu banget buat maintenance kode lama atau penasaran aja.
Contoh Sederhana Functional Component:
jsx
import React from 'react';function Sambutan() {
return (
Halo! Selamat datang di Component Pertamaku!
Ini adalah contoh sederhana Functional Component.
);
}
Simpel banget kan? Cuma function yang me-return sesuatu yang mirip HTML. Nah, itu dia yang namanya JSX.
2. Kenalan sama JSX: Bahasa "Semi-HTML" di React
JSX (JavaScript XML) itu bukan HTML lho, meskipun bentuknya mirip banget. JSX itu ekstensi sintaks dari JavaScript yang ngasih kita kemampuan buat nulis struktur UI kayak HTML di dalam kode JavaScript. React bakal nge-compile kode JSX kamu jadi panggilan fungsi React.createElement()
yang akhirnya bakal ngebentuk elemen-elemen UI di halaman web.
Kenapa pakai JSX?
- Lebih Mudah Dibaca: Nulis struktur UI pakai tag kayak HTML jauh lebih intuitif daripada pakai banyak pemanggilan fungsi
React.createElement()
. - Lebih Ekspresif: Kamu bisa dengan mudah nyisipin kode JavaScript di dalam struktur UI kamu (misalnya buat nampilin data dinamis atau logika kondisional).
Aturan main JSX yang perlu kamu tahu:
- Harus ada satu elemen induk (parent element) yang membungkus semua elemen lain di dalamnya. Kalau nggak mau ada extra
div
atau tag lain, bisa pakai<>
(Fragment) atau . - Atribut HTML yang nama property-nya pake tanda hubung (kayak
class
,for
) di JSX diganti jadi camelCase (kayakclassName
,htmlFor
).class
jadiclassName
karenaclass
adalah keyword di JavaScript. - Buat nyisipin kode JavaScript (kayak variabel, fungsi, ekspresi), kamu pakai kurung kurawal
{}
. Contoh:{namaUser}
.
Self-closing tag harus selalu di-close pakai slash di akhir: .
Contoh JSX yang pakai variabel:
jsx
import React from 'react';function UcapanPersonalisasi() {
const nama = "Andi"; // Variabel JavaScript
const umur = 25;return (
{/ Element induk /}
Hai, {nama}! {/ Menyisipkan variabel /}
Umur kamu sekarang {umur} tahun. {/ Menyisipkan variabel /}
{/ className & self-closing tag /}
);
}
Pahamin JSX ini penting banget karena kamu bakal nulis ini terus-terusan di setiap component React.
3. Props: Ngirim Data Antar Component
Component itu ibarat fungsi JavaScript. Nah, props itu kayak argument atau parameter buat fungsi itu. Props (kependekan dari "properties") adalah cara utama buat ngirim data dari component "induk" (parent) ke component "anak" (child). Data yang dikirim lewat props itu sifatnya read-only di component anak, artinya component anak nggak boleh mengubah data yang diterima dari props. Ini konsep penting yang namanya Uni-directional Data Flow (alir data satu arah), bikin data flow di aplikasi React kamu lebih gampang diprediksi.
Kamu ngirim props ke component anak mirip kayak ngasih atribut di tag HTML, tapi nilainya bisa macem-macem (string, angka, boolean, array, object, bahkan function atau component lain!).
Contoh Ngirim dan Menerima Props:
Component Anak (Greeting.js
):
jsx
import React from 'react';// Functional component menerima 'props' sebagai argumen
function Greeting(props) {
// Kita bisa akses data yang dikirim dari induk lewat props.nama dan props.pesan
return (
Halo, {props.nama}!
{props.pesan}
);
}
Component Induk (App.js
):
jsx
import React from 'react';
import Greeting from './Greeting'; // Import component anakfunction App() {
const namaPengguna = "Budi";
const kataPembuka = "Semoga harimu menyenangkan!";return (
Aplikasi Utamaku
{/ Menggunakan component Greeting dan mengirim data lewat 'nama' dan 'pesan' /}
{/ Bisa juga ngirim data langsung /}
);
}
Di contoh ini, App
adalah component induk yang ngirim data namaPengguna
dan kataPembuka
ke component Greeting
lewat props nama
dan pesan
. Di dalam Greeting
, kita bisa ngakses data itu lewat objek props
.
4. State: Bikin Component Kamu Interaktif
Kalau props itu buat data yang datangnya dari luar dan nggak berubah di dalam component anak, state itu buat data yang dimiliki oleh component itu sendiri dan bisa berubah seiring waktu atau interaksi user. Perubahan state inilah yang bikin UI kamu dinamis dan interaktif.
Di Functional Components, kita pakai Hook useState
buat nambahin state. useState
ini bakal ngasih kita dua hal: variabel state itu sendiri dan sebuah function buat mengubah variabel state itu.
Cara Pakai useState
:
javascript
const [namaVariabelState, setNamaVariabelState] = useState(nilaiAwal);
namaVariabelState
: Ini variabel yang menyimpan nilai state kamu saat ini.
setNamaVariabelState
: Ini adalah function yang harus kamu panggil kalau mau mengubah nilai state. Penting: Kamu nggak boleh* langsung mengubah namaVariabelState = nilaiBaru
. Selalu gunakan function set...
yang diberikan useState
.
nilaiAwal
: Ini nilai awal dari state kamu saat component pertama kali di-render.
Contoh State Sederhana (Counter):
jsx
import React, { useState } from 'react'; // Jangan lupa import useState!function Counter() {
// Deklarasi state 'hitung' dengan nilai awal 0
const [hitung, setHitung] = useState(0);// Function buat nambah hitungan
const tambahHitung = () => {
setHitung(hitung + 1); // Mengubah state menggunakan setter function
};// Function buat ngurang hitungan
const kurangHitung = () => {
// Pastikan nggak kurang dari 0
if (hitung > 0) {
setHitung(hitung - 1);
}
};return (
Jumlah Hitungan: {hitung} {/ Menampilkan nilai state /}
Tambah {/ Event Handling (nanti dibahas) /}
Kurang
);
}
Setiap kali kamu panggil setHitung()
, React bakal tahu kalau state dari component Counter
berubah, dan React bakal me-render ulang (update UI) component itu buat nampilin nilai hitung
yang terbaru. Ini mekanisme inti yang bikin UI di React itu responsif terhadap perubahan data.
5. Event Handling: Merespon Interaksi User
Aplikasi web kan harus bisa berinteraksi sama user. Klik tombol, ngetik di input, hover mouse, dll. Di React, merespon interaksi user ini namanya Event Handling. Caranya mirip sama di HTML biasa (misalnya onclick
), tapi ada bedanya:
- Nama event-nya pakai camelCase (misalnya
onClick
,onChange
,onSubmit
).
Nilai dari event handler-nya itu adalah sebuah function JavaScript*, bukan string.
Contoh Event Handling (udah ada di contoh Counter tadi):
jsx
Tambah
Di sini, saat tombol diklik, React bakal manggil function tambahHitung
yang udah kita definisikan. Function itu kemudian mengubah state hitung
. Simpel kan?
Kamu juga bisa nerima objek event-nya kalau perlu, misalnya buat dapetin nilai input dari form:
jsx
function InputText() {
const [teks, setTeks] = useState('');const handleInputChange = (event) => {
// event.target.value ngasih nilai dari elemen input
setTeks(event.target.value);
};return (
Kamu nulis: {teks}
);
}
6. Conditional Rendering: Nampilin Sesuatu Bergantung Kondisi
Seringkali, kamu cuma mau nampilin bagian UI tertentu kalau kondisi tertentu terpenuhi. Misalnya, nampilin tombol 'Logout' cuma kalau user udah login, atau nampilin pesan loading pas lagi fetching data. Di React, ini namanya Conditional Rendering. Kamu bisa pakai JavaScript biasa di dalam JSX:
- If/Else: Pakai statement
if
di luarreturn
atau pakai operator ternary (kondisi ? benar : salah
) di dalamreturn
. - Logical &&: Kalau cuma mau nampilin sesuatu kalau kondisinya benar, bisa pakai operator
&&
. Kalau kondisi di kiri&&
itutrue
, React bakal nge-render yang ada di kanan&&
.
Contoh Conditional Rendering:
jsx
import React, { useState } from 'react';function PesanLogin() {
const [isLoggedIn, setIsLoggedIn] = useState(false); // State buat status login// Menggunakan ternary operator di dalam return
return (
{isLoggedIn ? (
// Kalau isLoggedIn true
<> {/ Fragment /}
Selamat datang kembali!
setIsLoggedIn(false)}>Logout
) : (
// Kalau isLoggedIn false
<> {/ Fragment /}
Silakan login dulu
setIsLoggedIn(true)}>Login
)}{/ Contoh pakai logical && /}
{isLoggedIn && Ini cuma kelihatan kalau kamu udah login.}
);
}
Gampang kan? Kamu bisa nerapin logika ini buat nampilin berbagai macam UI berdasarkan state atau props component kamu.
7. Rendering Lists: Nampilin Daftar Item
Di aplikasi web, kita sering banget nampilin daftar item, kayak daftar produk, daftar komentar, daftar menu, dll. Di React, kalau datanya dalam bentuk array JavaScript, cara paling umum buat nge-render daftar component atau elemen HTML dari array itu adalah pakai method .map()
dari array.
Pentingnya key
prop: Saat nge-render daftar elemen, React minta kamu buat nambahin prop spesial namanya key
di elemen paling atas dalam loop .map()
. key
ini harus punya nilai yang unik di antara item-item dalam daftar itu (jangan pakai index array kalau urutan item-nya bisa berubah!). React pakai key
ini buat identifikasi item mana yang berubah, ditambah, atau dihapus, biar proses update UI-nya lebih efisien.
Contoh Rendering List:
jsx
import React from 'react';function DaftarItem(props) {
const items = props.items; // Asumsikan props.items adalah array of stringsreturn (
{/ Pakai map() buat iterasi array /}
{items.map((item, index) => (
// Setiap item di list butuh prop 'key' yang unik
// Kalau item-nya unik, pakai item itu sendiri sebagai key
// Kalau nggak yakin unik, bisa pakai ID dari data (kalau ada)
// Hindari pakai 'index' kalau order item bisa berubah
{/ Contoh pakai index, tapi hati-hati /}
{item}
))}
);
}// Cara pakainya di component lain:
function App() {
const daftarBelanja = ['Apel', 'Jeruk', 'Pisang', 'Mangga'];return (
Daftar Belanja
{/ Mengirim array via props /}
);
}
Pastikan kamu selalu nambahin key
prop saat nge-render list. Kebanyakan error yang nggak jelas di list rendering itu seringkali karena key
prop-nya salah atau nggak ada.
8. Component Composition: Membangun UI Kompleks
Filosofi utama React adalah membangun UI dari component-component kecil. Component-component kecil ini kemudian digabungin (composed) jadi component yang lebih besar dan kompleks. Ini kayak nyusun balok LEGO tadi. Kamu nggak langsung punya kapal besar, tapi mulai dari balok, dirakit jadi bagian kecil, bagian kecil dirakit lagi jadi bagian lebih besar, sampai akhirnya jadi satu objek utuh.
Di React, composition itu sederhana banget: kamu cuma perlu menggunakan component lain di dalam JSX component yang sedang kamu buat.
Contoh Composition:
Component Anak 1 (Judul.js
):
jsx
import React from 'react';function Judul(props) {
return {props.teks};
}
export default Judul;
Component Anak 2 (Paragraf.js
):
jsx
import React from 'react';function Paragraf(props) {
return {props.teks};
}
export default Paragraf;
Component Induk (Artikel.js
):
jsx
import React from 'react';
import Judul from './Judul'; // Import component anak
import Paragraf from './Paragraf'; // Import component anakfunction Artikel(props) {
return (
{/ Component induk membungkus component anak /}
{/ Menggunakan component anak /}
{/ Menggunakan component anak /}
);
}
Di sini, component Artikel
me-render component Judul
dan Paragraf
di dalamnya. Component App
di level paling atas bisa aja me-render component Artikel
, dan seterusnya. Ini yang bikin struktur aplikasi React kamu jadi kayak pohon component.
9. Lifecycle dengan useEffect
(Gambaran Awal)
Class Components punya metode "lifecycle" yang dipanggil di momen-momen tertentu (saat component pertama kali muncul di halaman, saat diupdate, saat dihilangkan). Di Functional Components, konsep ini ditangani sama Hook useEffect
.
useEffect
ini dipakai buat ngelakuin "side effects" di component kamu. Side effects itu adalah hal-hal yang terjadi di luar "dunia" React kamu, kayak:
- Fetching data dari API.
- Manipulasi DOM secara manual (jarang perlu di React, tapi kadang ada kasusnya).
- Setup subscription atau timer.
- Menyimpan data ke local storage.
useEffect
menerima dua argumen:
- Sebuah function yang berisi kode side effect kamu.
- Sebuah array yang isinya daftar "dependencies" (state atau props) yang kalau berubah,
useEffect
bakal dijalankan ulang. Kalau array-nya kosong ([]
), effect cuma dijalankan sekali pas component pertama kali muncul (miripcomponentDidMount
). Kalau array-nya nggak ada sama sekali, effect dijalankan setiap kali component di-render ulang.
Contoh Sederhana useEffect
(Fetching Data Palsu):
jsx
import React, { useState, useEffect } from 'react';function DataFetcher() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);// useEffect bakal dijalankan setelah render pertama kali
// Array kosong [] artinya effect ini cuma jalan sekali
useEffect(() => {
// Simulasikan fetching data dari API
setTimeout(() => {
const fetchedData = "Ini data dari server!";
setData(fetchedData);
setLoading(false);
console.log("Data berhasil di-fetch!"); // Ini side effect
}, 2000); // Delay 2 detik simulasi loading// Cleanup function (opsional), dijalankan saat component unmount
return () => {
console.log("Component di-unmount, lakukan cleanup!");
// Misalnya: membersihkan timer atau membatalkan request
};}, []); // Dependency array kosongif (loading) {
return Lagi ngambil data...;
}return (
Data yang berhasil diambil:
{data}
);
}
Konsep useEffect
ini emang butuh waktu buat benar-benar paham, terutama soal dependency array-nya. Tapi buat awal, pahami dulu bahwa ini tempat buat ngelakuin "aksi" di luar render normal (kayak ngambil data) dan kapan useEffect
itu dijalankan (tergantung dependency array-nya).
Setelah Paham Dasar Component, Mau Ngulik Apa Lagi?
Selamat! Kalau kamu udah paham props, state, JSX, dan gimana component berinteraksi dasar, kamu udah punya fondasi yang kuat banget di React. Langkah selanjutnya buat ngulik lebih dalam bisa ke topik-topik ini:
- React Router: Buat bikin aplikasi single-page application (SPA) dengan navigasi antar halaman.
- Fetching Data yang Lebih Serius: Pakai library kayak Axios atau Fetch API bawaan browser buat ngambil data beneran dari backend.
- Context API atau State Management: Buat ngatur state yang kompleks atau state yang perlu dibagi ke banyak component tanpa harus ngirim props turun berkali-kali (Props Drilling). Contoh library state management populer: Redux, Zustand, Recoil.
- Styling di React: Ada banyak cara, mulai dari CSS biasa, CSS Modules, Styled Components, atau library UI Framework (Material UI, Ant Design, Tailwind CSS).
- Hooks Lanjutan: Pelajari Hooks lain selain
useState
danuseEffect
, kayakuseContext
,useReducer
,useCallback
,useMemo
, dll.
Tips Jitu Biar Belajar Component React Kamu Efektif:
- Start Small, Build Often: Jangan langsung mikir bikin aplikasi sosial media atau e-commerce kompleks. Mulai dari component-component kecil: tombol, input, card, header. Setelah bisa, coba gabungin jadi component yang lebih besar (form login, daftar item). Terus, coba bikin aplikasi kecil yang sederhana (aplikasi to-do list, kalkulator sederhana). Praktek itu kunci!
- Baca Dokumentasi Resmi React: Ini sumur ilmu paling valid dan update. Dokumentasi React itu bagus banget dan ramah pemula. Anggap ini teman ngulik terbaik kamu.
- Tonton Tutorial, Tapi Jangan Cuma Nonton: Banyak banget tutorial React di YouTube, Udemy, Coursera, atau platform lain. Bagus buat dapet gambaran, tapi wajib sambil kamu ketik kodenya sendiri, eksperimen, dan coba modifikasi. Nonton doang nggak bakal bikin jago ngoding.
- Pahami Why, Bukan Cuma How: Jangan cuma ikutin langkah-langkah tutorial aja. Coba pahami kenapa harus pakai props di sini, kenapa state-nya ditaruh di component A, kenapa pakai
useEffect
di sini. Memahami konsep di baliknya jauh lebih berharga daripada sekadar bisa ngetik kode. - Jangan Takut Sama Error: Error itu sahabat developer. Setiap kali nemu error, jangan panik. Baca pesan error-nya baik-baik. Cari di Google atau Stack Overflow (pasti udah banyak yang ngalamin error yang sama). Ini cara terbaik buat belajar debugging.
- Gabung Komunitas: Cari grup atau forum developer React di Indonesia atau internasional. Kamu bisa nanya kalau stuck, belajar dari pertanyaan orang lain, atau sekadar sharing perkembangan belajarmu. Lingkungan yang supportif itu penting.
- Konsisten: Belajar coding itu maraton, bukan sprint. Sisihkan waktu setiap hari atau beberapa kali seminggu buat ngulik dan praktek. Sedikit tapi rutin itu lebih baik daripada maraton sehari tapi besoknya nggak nyentuh kode lagi.
Belajar component di React itu ibarat belajar abjad dan merangkai kata di bahasa baru. Begitu kamu udah nyaman sama konsep-konsep dasarnya (JSX, Props, State, Event Handling, Composition), pintu ke dunia pengembangan web modern menggunakan React bakal terbuka lebar buat kamu.
Jadi, nggak usah pusing mikirin harus mulai dari mana lagi kan? Ambil laptop kamu, setup project React pertama kamu (paling gampang pakai Create React App atau Vite), dan mulai coba bikin component HaloDunia
sederhana, tambahin props biar bisa nyapa nama yang beda-beda, kasih tombol biar bisa ngubah teks sapaannya pakai state. Nggak ada cara yang lebih baik selain langsung do it!
Semangat nguliknya ya! Prosesnya mungkin nggak selalu mulus, ada nyangkutnya, ada frustasinya, tapi percayalah, setiap kali kamu berhasil bikin component kamu bekerja sesuai yang diinginkan, rasanya puas banget! Teruslah bereksperimen dan jangan pernah berhenti belajar. Dunia React (dan web development pada umumnya) itu terus berkembang, dan skill kamu juga harus ikut berkembang. Good luck!