Tutorial React: Panduan Pemula

Audrey Lopez

Audrey Lopez

13 June 2025

Tutorial React: Panduan Pemula

Selamat datang, calon pengembang React! Anda telah membuat pilihan yang luar biasa. React adalah pustaka JavaScript yang kuat dan populer untuk membangun antarmuka pengguna, dan mempelajarinya adalah cara pasti untuk meningkatkan keterampilan pengembangan web Anda. Panduan komprehensif langkah demi langkah ini akan membawa Anda dari nol menjadi ahli, membekali Anda dengan pengetahuan praktis yang Anda butuhkan untuk mulai membangun aplikasi React Anda sendiri di tahun 2025. Kita akan fokus pada praktik, bukan hanya membaca, jadi bersiaplah untuk menulis beberapa kode!

💡
Ingin alat Pengujian API hebat yang menghasilkan Dokumentasi API yang indah?

Ingin platform Terintegrasi, All-in-One untuk Tim Pengembang Anda agar dapat bekerja sama dengan produktivitas maksimum?

Apidog memenuhi semua permintaan Anda, dan menggantikan Postman dengan harga yang jauh lebih terjangkau!
tombol

Mari Siapkan Lingkungan Pengembangan React Anda

Sebelum kita bisa mulai membangun antarmuka pengguna yang menakjubkan, kita perlu menyiapkan tempat kerja. Anggap saja ini seperti menyiapkan bengkel Anda sebelum memulai proyek baru.

Menginstal yang Penting: Node.js dan npm

Aplikasi React dibangun dan dikelola menggunakan Node.js dan manajer paketnya, npm (Node Package Manager).

Untuk memulai, kunjungi situs web resmi Node.js dan unduh versi Long-Term Support (LTS) terbaru. Penginstalnya mudah; cukup ikuti instruksi di layar. Setelah terinstal, Anda akan memiliki Node.js dan npm yang siap digunakan. Anda dapat memverifikasi instalasi dengan membuka terminal atau command prompt Anda dan mengetik:

Bash

node -v
npm -v

Perintah-perintah ini akan mencetak versi Node.js dan npm yang telah Anda instal, secara berurutan.

Proyek React Pertama Anda dengan Vite

Di masa lalu, create-react-app adalah alat utama untuk memulai proyek React baru. Namun, lanskap pengembangan web modern bergerak cepat, dan di tahun 2025, Vite adalah pilihan yang direkomendasikan karena kecepatannya yang luar biasa dan efisiensinya.

Untuk membuat proyek React baru dengan Vite, buka terminal Anda dan jalankan perintah berikut:

Bash

npm create vite@latest my-first-react-app -- --template react

Mari kita bedah perintah ini:

Setelah perintah selesai, Anda akan memiliki direktori baru dengan nama proyek Anda. Masuk ke direktori ini:

Bash

cd my-first-react-app

Selanjutnya, Anda perlu menginstal dependensi proyek. Ini adalah paket lain yang dibutuhkan aplikasi React Anda agar berfungsi dengan benar. Jalankan perintah ini:

Bash

npm install

Akhirnya, untuk melihat aplikasi React baru Anda beraksi, jalankan server pengembangan:

Bash

npm run dev

Terminal Anda akan menampilkan URL lokal, biasanya http://localhost:5173. Buka URL ini di peramban web Anda, dan Anda akan melihat aplikasi React default yang dibuat oleh Vite. Selamat, Anda baru saja menyiapkan proyek React pertama Anda!


Inti React: Komponen dan JSX

Sekarang setelah Anda memiliki aplikasi React yang berjalan, mari selami konsep inti yang membuat React begitu kuat: komponen dan JSX.

Apa Itu Komponen?

Pada intinya, aplikasi React adalah kumpulan bagian UI yang dapat digunakan kembali dan mandiri yang disebut komponen. Bayangkan halaman web dibangun dengan balok LEGO. Setiap balok adalah komponen, dan Anda dapat menggabungkannya untuk membuat struktur yang lebih kompleks.

Dalam proyek my-first-react-app Anda, buka folder src dan Anda akan menemukan file bernama App.jsx. Ini adalah komponen aplikasi utama Anda. Mari sederhanakan isinya untuk memahami dasar-dasarnya:

JavaScript

// src/App.jsx

function App() {
  return (
    <div>
      <h1>Hello, React World!</h1>
      <p>This is my very first React component.</p>
    </div>
  );
}

export default App;

Dalam kode ini:

Memahami JSX: JavaScript XML

JSX adalah ekstensi sintaks untuk JavaScript yang memungkinkan Anda menulis kode seperti HTML di dalam file JavaScript Anda. Ini sebenarnya bukan HTML, tetapi membuat penulisan kode UI jauh lebih intuitif dan mudah dibaca.

Di balik layar, alat yang disebut transpiler (dalam kasus kita, didukung oleh Vite) mengubah JSX ini menjadi JavaScript biasa yang dapat dipahami oleh peramban.

Mari kita modifikasi App.jsx kita untuk melihat kekuatan JSX. Kita dapat menyematkan ekspresi JavaScript langsung di dalam JSX kita dengan menggunakan kurung kurawal {}.

JavaScript

// src/App.jsx

function App() {
  const name = "Pengembang Pemula";
  const year = new Date().getFullYear();

  return (
    <div>
      <h1>Halo, {name}!</h1>
      <p>Selamat datang di perjalanan React Anda di tahun {year}.</p>
    </div>
  );
}

export default App;

Simpan file, dan peramban Anda akan otomatis memperbarui untuk menampilkan konten baru. Ini adalah fitur Vite yang disebut Hot Module Replacement (HMR), dan ini memberikan pengalaman pengembangan yang luar biasa.

Membuat Komponen Kustom Pertama Anda

Mari kita buat komponen kita sendiri. Di folder src, buat file baru bernama Greeting.jsx.

JavaScript

// src/Greeting.jsx

function Greeting() {
  return (
    <h2>Ini adalah sapaan dari komponen kustom saya!</h2>
  );
}

export default Greeting;

Sekarang, mari kita gunakan komponen Greeting baru ini di dalam komponen App.jsx kita.

JavaScript

// src/App.jsx
import Greeting from './Greeting'; // Impor komponen Greeting

function App() {
  const name = "Pengembang Pemula";
  const year = new Date().getFullYear();

  return (
    <div>
      <h1>Halo, {name}!</h1>
      <p>Selamat datang di perjalanan React Anda di tahun {year}.</p>
      <Greeting /> {/* Gunakan komponen Greeting */}
    </div>
  );
}

export default App;

Dengan mengimpor dan kemudian menggunakan <Greeting /> seperti tag HTML biasa, kita telah menyusun UI kita dari beberapa komponen. Ini adalah blok bangunan fundamental dari aplikasi React.


Meneruskan Data dengan Props

Komponen Greeting kita agak statis. Bagaimana jika kita ingin menyapa orang yang berbeda? Di sinilah props (singkatan dari properties) berperan. Props adalah cara Anda meneruskan data dari komponen induk ke komponen anak.

Membuat Komponen Dinamis dengan Props

Mari kita modifikasi Greeting.jsx kita untuk menerima prop name.

JavaScript

// src/Greeting.jsx

function Greeting(props) {
  return (
    <h2>Halo, {props.name}! Ini adalah sapaan dari komponen kustom saya.</h2>
  );
}

export default Greeting;

Sekarang, di App.jsx, kita bisa meneruskan prop name ke komponen Greeting kita.

JavaScript

// src/App.jsx
import Greeting from './Greeting';

function App() {
  return (
    <div>
      <Greeting name="Alice" />
      <Greeting name="Bob" />
      <Greeting name="Charlie" />
    </div>
  );
}

export default App;

Anda sekarang akan melihat tiga sapaan yang berbeda, masing-masing dengan nama unik. Props memungkinkan kita menggunakan kembali komponen dengan data yang berbeda, membuat UI kita sangat fleksibel.

Praktik JavaScript yang umum dan modern adalah melakukan destructuring objek props langsung di daftar parameter fungsi. Mari kita refactor Greeting.jsx:

JavaScript

// src/Greeting.jsx

function Greeting({ name }) {
  return (
    <h2>Halo, {name}! Ini adalah sapaan dari komponen kustom saya.</h2>
  );
}

export default Greeting;

Ini mencapai hasil yang sama tetapi dengan kode yang lebih bersih dan ringkas.


Mengelola Memori Komponen dengan State

Meskipun props sangat bagus untuk meneruskan data ke bawah pohon komponen, apa yang terjadi ketika sebuah komponen perlu mengingat dan mengelola datanya sendiri? Di sinilah state berperan. State adalah data yang dikelola di dalam sebuah komponen. Ketika state sebuah komponen berubah, React akan secara otomatis me-render ulang komponen tersebut untuk mencerminkan state baru.

Memperkenalkan Hook useState

Untuk mengelola state dalam komponen fungsional, kita menggunakan fungsi khusus dari React yang disebut Hook. Hook yang paling fundamental adalah useState.

Mari kita bangun komponen penghitung sederhana untuk memahami cara kerja useState. Buat file baru di folder src Anda bernama Counter.jsx.

JavaScript

// src/Counter.jsx
import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Anda mengklik {count} kali</p>
      <button onClick={() => setCount(count + 1)}>
        Klik saya
      </button>
    </div>
  );
}

export default Counter;

Mari kita bedah ini:

  1. count: Nilai state saat ini.
  2. setCount: Fungsi yang dapat kita gunakan untuk memperbarui state count.

Sekarang, mari kita tambahkan komponen Counter ini ke App.jsx kita:

JavaScript

// src/App.jsx
import Counter from './Counter';

function App() {
  return (
    <div>
      <h1>Aplikasi React Saya yang Hebat</h1>
      <Counter />
    </div>
  );
}

export default App;

Anda sekarang akan melihat penghitung di peramban Anda. Setiap kali Anda mengklik tombol, angkanya bertambah. React me-render ulang komponen Counter setiap kali statenya berubah.


Merespons Tindakan Pengguna: Menangani Event

Interaktivitas adalah inti dari aplikasi web modern. React menyediakan cara yang sederhana dan konsisten untuk menangani event seperti klik, pengiriman formulir, dan input keyboard.

Kita sudah melihat event handler dasar di komponen Counter kita dengan onClick. Mari kita jelajahi lebih lanjut dengan membangun formulir sederhana yang mengambil input pengguna.

Buat file komponen baru bernama NameForm.jsx.

JavaScript

// src/NameForm.jsx
import { useState } from 'react';

function NameForm() {
  const [name, setName] = useState('');

  const handleSubmit = (event) => {
    event.preventDefault(); // Mencegah perilaku pengiriman formulir default
    alert(`Halo, ${name}!`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Nama:
        <input
          type="text"
          value={name}
          onChange={(event) => setName(event.target.value)}
        />
      </label>
      <button type="submit">Kirim</button>
    </form>
  );
}

export default NameForm;

Mari kita analisis komponen formulir ini:

Tambahkan NameForm ini ke App.jsx Anda untuk melihatnya beraksi.


Menampilkan Informasi: Conditional Rendering dan List

Aplikasi dunia nyata sering kali perlu menampilkan atau menyembunyikan konten berdasarkan kondisi tertentu, dan mereka sering kali perlu menampilkan daftar data.

Menampilkan dan Menyembunyikan dengan Conditional Rendering

Mari kita buat komponen yang menampilkan pesan yang berbeda tergantung pada apakah pengguna masuk atau tidak. Buat file bernama LoginMessage.jsx.

JavaScript

// src/LoginMessage.jsx

function LoginMessage({ isLoggedIn }) {
  if (isLoggedIn) {
    return <h2>Selamat datang kembali!</h2>;
  }
  return <h2>Silakan masuk.</h2>;
}

export default LoginMessage;

Kita juga bisa menggunakan ternary operator untuk conditional rendering yang lebih ringkas.

JavaScript

// src/LoginMessage.jsx

function LoginMessage({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? <h2>Selamat datang kembali!</h2> : <h2>Silakan masuk.</h2>}
    </div>
  );
}

export default LoginMessage;

Anda kemudian dapat menggunakan komponen ini di App.jsx dan meneruskan prop isLoggedIn untuk melihat pesan yang berbeda.

Menampilkan Daftar Data

Untuk me-render daftar item, Anda biasanya akan menggunakan metode array map(). Mari kita buat komponen untuk menampilkan daftar buah-buahan. Buat file bernama FruitList.jsx.

JavaScript

// src/FruitList.jsx

function FruitList() {
  const fruits = ['Apel', 'Pisang', 'Ceri', 'Kurma'];

  return (
    <div>
      <h3>Buah Favorit Saya:</h3>
      <ul>
        {fruits.map((fruit, index) => (
          <li key={index}>{fruit}</li>
        ))}
      </ul>
    </div>
  );
}

export default FruitList;

Di sini, kita melakukan mapping pada array fruits dan untuk setiap buah, kita mengembalikan elemen <li>.

Anda akan melihat prop key={index}. Ketika Anda me-render daftar item, React membutuhkan key unik untuk setiap item agar dapat memperbarui daftar secara efisien ketika berubah. Menggunakan indeks array sebagai key dapat diterima untuk daftar yang sederhana dan statis. Namun, untuk daftar dinamis di mana item dapat ditambahkan, dihapus, atau diurutkan ulang, sebaiknya gunakan ID unik dari data Anda jika tersedia.


Menambahkan Gaya ke Aplikasi Anda

Aplikasi yang hebat perlu terlihat bagus. Ada beberapa cara untuk menata gaya komponen React Anda.

Stylesheet CSS

Cara paling mudah adalah menggunakan file CSS biasa. Di folder src, Anda akan menemukan file App.css. Anda dapat menambahkan gaya Anda di sana.

Misalnya, untuk menata gaya komponen FruitList kita, Anda bisa menambahkan ini ke App.css:

CSS

/* src/App.css */

.fruit-list {
  list-style-type: none;
  padding: 0;
}

.fruit-item {
  background-color: #f0f0f0;
  margin: 5px 0;
  padding: 10px;
  border-radius: 5px;
}

Kemudian, di FruitList.jsx Anda, Anda dapat menggunakan kelas CSS ini.

JavaScript

// src/FruitList.jsx
import './App.css'; // Pastikan untuk mengimpor file CSS

function FruitList() {
  const fruits = ['Apel', 'Pisang', 'Ceri', 'Kurma'];

  return (
    <div>
      <h3>Buah Favorit Saya:</h3>
      <ul className="fruit-list">
        {fruits.map((fruit, index) => (
          <li key={index} className="fruit-item">{fruit}</li>
        ))}
      </ul>
    </div>
  );
}

export default FruitList;

Perhatikan bahwa kita menggunakan className alih-alih class di JSX, karena class adalah kata kunci yang dicadangkan di JavaScript.

Modul CSS

Untuk aplikasi yang lebih besar, Modul CSS menawarkan cara untuk mengunci gaya ke komponen tertentu, mencegah konflik gaya. File Modul CSS diberi nama dengan ekstensi .module.css.

Mari kita buat FruitList.module.css:

CSS

/* src/FruitList.module.css */

.list {
  list-style-type: square;
}

.item {
  color: blue;
}

Sekarang, di FruitList.jsx, Anda mengimpor gaya sebagai objek:

JavaScript

// src/FruitList.jsx
import styles from './FruitList.module.css';

function FruitList() {
  const fruits = ['Apel', 'Pisang', 'Ceri', 'Kurma'];

  return (
    <div>
      <h3>Buah Favorit Saya (Ditata Gaya dengan Modul CSS):</h3>
      <ul className={styles.list}>
        {fruits.map((fruit, index) => (
          <li key={index} className={styles.item}>{fruit}</li>
        ))}
      </ul>
    </div>
  );
}

export default FruitList;

Vite akan secara otomatis menghasilkan nama kelas unik, memastikan bahwa gaya dalam FruitList.module.css hanya berlaku untuk komponen FruitList.


Menavigasi Melalui Aplikasi Anda dengan React Router

Sebagian besar aplikasi web memiliki banyak halaman. Untuk menangani navigasi antar "halaman" ini dalam aplikasi satu halaman (SPA) seperti yang dibangun dengan React, kita menggunakan pustaka yang disebut React Router.

Menyiapkan React Router

Pertama, Anda perlu menginstal React Router:

Bash

npm install react-router-dom

Membuat Halaman Anda

Mari kita buat dua komponen halaman sederhana: HomePage.jsx dan AboutPage.jsx.

JavaScript

// src/HomePage.jsx

function HomePage() {
  return (
    <div>
      <h1>Halaman Beranda</h1>
      <p>Selamat datang di halaman beranda aplikasi kami yang luar biasa!</p>
    </div>
  );
}

export default HomePage;

JavaScript

// src/AboutPage.jsx

function AboutPage() {
  return (
    <div>
      <h1>Halaman Tentang</h1>
      <p>Ini semua tentang aplikasi kami yang luar biasa.</p>
    </div>
  );
}

export default AboutPage;

Mengonfigurasi Router

Sekarang, kita akan mengonfigurasi rute kita di App.jsx.

JavaScript

// src/App.jsx
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
import HomePage from './HomePage';
import AboutPage from './AboutPage';

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Beranda</Link>
            </li>
            <li>
              <Link to="/about">Tentang</Link>
            </li>
          </ul>
        </nav>

        <hr />

        <Routes>
          <Route path="/" element={<HomePage />} />
          <Route path="/about" element={<AboutPage />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

Mari kita bedah komponen baru dari React Router:

Sekarang, ketika Anda mengklik tautan "Beranda" dan "Tentang", konten akan berubah tanpa memuat ulang halaman penuh. Anda telah berhasil mengimplementasikan client-side routing!


Melangkah Lebih Jauh: Hook useEffect

Hook useState adalah untuk mengelola state yang secara langsung memengaruhi apa yang di-render. Tapi bagaimana dengan efek samping, seperti mengambil data dari API, menyiapkan langganan, atau mengubah DOM secara manual? Untuk ini, kita menggunakan Hook useEffect.

Hook useEffect berjalan setelah setiap render secara default. Mari kita lihat aksinya dengan membuat komponen yang mengambil data dari API palsu.

Buat file baru DataFetcher.jsx.

JavaScript

// src/DataFetcher.jsx
import { useState, useEffect } from 'react';

function DataFetcher() {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    // Fungsi ini akan dipanggil setelah komponen di-render
    const fetchData = async () => {
      try {
        const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
        const jsonData = await response.json();
        setData(jsonData);
      } catch (error) {
        console.error('Kesalahan mengambil data:', error);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, []); // Array dependensi kosong itu penting!

  if (loading) {
    return <p>Memuat...</p>;
  }

  return (
    <div>
      <h3>Data yang Diambil:</h3>
      <h4>{data.title}</h4>
      <p>{data.body}</p>
    </div>
  );
}

export default DataFetcher;

Kunci untuk memahami useEffect di sini adalah argumen kedua: dependency array (array dependensi).

Tambahkan DataFetcher ke App.jsx Anda untuk melihatnya mengambil dan menampilkan data saat komponen dimuat.

Kesimpulan dan Langkah Selanjutnya

Anda telah menempuh perjalanan yang panjang! Anda telah mempelajari cara:

Ini adalah pencapaian besar, dan Anda sekarang memiliki fondasi yang kokoh untuk dibangun. Dunia React sangat luas dan menarik. Berikut adalah beberapa topik yang mungkin ingin Anda jelajahi selanjutnya:

Hal terpenting yang dapat Anda lakukan sekarang adalah terus membangun. Latihan adalah kunci. Coba buat ulang situs web atau aplikasi sederhana yang Anda gunakan sehari-hari. Tantang diri Anda dengan fitur-fitur baru. Semakin banyak Anda coding, semakin percaya diri dan terampil Anda akan menjadi.

Selamat datang di komunitas React. Selamat coding!

💡
Ingin alat Pengujian API hebat yang menghasilkan Dokumentasi API yang indah?

Ingin platform Terintegrasi, All-in-One untuk Tim Pengembang Anda agar dapat bekerja sama dengan produktivitas maksimum?

Apidog memenuhi semua permintaan Anda, dan menggantikan Postman dengan harga yang jauh lebih terjangkau!
tombol

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.