Dapatkan Data Real-time: Cara Mengambil Data dari API Eksternal di React JS (Part 13)
Rifqi An
Dapatkan Data Real-time: Cara Mengambil Data dari API Eksternal di React JS (Part 13)
Waduh, udah sampai Part 13 aja nih perjalanan kita di dunia React JS! Kalau sebelumnya kita udah asyik main-main sama state, props, dan lifecycle komponen, sekarang saatnya kita naik level. Pernah kebayang gimana aplikasi-aplikasi keren bisa nampilin data yang selalu update, misalnya harga saham, skor pertandingan, atau bahkan feed Instagram? Nah, kuncinya ada di API Eksternal! Ini dia skill wajib yang bakal bikin aplikasi React kamu jadi lebih hidup dan interaktif. Siap lembur ngoding dan ngopi sampai pusing? Yuk, gas!
Daftar Isi
- Pengenalan: Kenapa Kita Perlu API Eksternal?
- Modal Utama:
useStatedanuseEffect - Ngambil Data Pakai
fetch() - Implementasi di Komponen React: Step by Step
- Error Handling: Biar Aplikasi Gak Gampang Ambruk
- Latihan: Studi Kasus Lucu Bikin Data Resep Mie Instan
Pengenalan: Kenapa Kita Perlu API Eksternal?
Oke, bayangin gini. Kamu bikin aplikasi React keren buat nunjukkin jadwal kereta api. Masa iya, setiap ada perubahan jadwal, kamu harus ubah kodingan manual di aplikasi kamu? Kan gak efektif banget, Bro! Di sinilah peran API eksternal jadi pahlawan. API (Application Programming Interface) itu kayak pelayan yang bisa ngambilin data dari "dapur" (server) dan ngasih ke aplikasi kita, tanpa kita perlu tahu detail gimana datanya dimasak.
Dengan ngambil data dari API, aplikasi kita bisa selalu up-to-date, dinamis, dan gak kaku. Kita bisa pamer data real-time, lho! Ini penting banget buat aplikasi modern yang butuh interaksi terus-menerus dengan dunia luar. Dijamin, aplikasi kamu bakal naik level dari sekadar halaman statis jadi aplikasi yang beneran "hidup"!
Modal Utama: useState dan useEffect
Sebelum kita terjun ngambil data, ada dua hook andalan di React yang wajib kamu kuasai: useState dan useEffect. Kita udah sering bahas ini, tapi gak ada salahnya ngulang dikit buat me-refresh otak yang kebanyakan ngopi.
useState: Buat Nyimpan Data Sementara
Hook ini kita pakai buat nyimpan data yang bakal berubah di komponen kita. Kenapa penting? Karena data dari API itu kan gak langsung ada. Prosesnya asinkronus (nunggu), jadi pas datanya datang, kita perlu "menyimpan" data itu di suatu tempat biar komponen bisa di-render ulang dengan data baru. Contohnya:
import React, { useState } from 'react';
function MyComponent() {
const [dataPosts, setDataPosts] = useState([]); // State untuk nyimpan array data postingan
const [isLoading, setIsLoading] = useState(true); // State untuk nunjukkin loading
const [error, setError] = useState(null); // State untuk nyimpan error
// ... logika ambil data nanti di sini
return (
<div>
{/* ... render UI di sini */}
</div>
);
}
useEffect: Juru Panggil API
Nah, kalau ini adalah tempat favorit para programmer buat manggil API. Kenapa? Karena useEffect ini cocok banget buat operasi yang punya side effect, seperti ngambil data dari server, subscribe ke event, atau manipulasi DOM langsung. useEffect bakal jalan setelah setiap render (secara default) atau ketika dependensi yang kita kasih berubah. Untuk kasus ambil data, kita biasanya cuma mau panggil sekali pas komponen pertama kali muncul, biar gak bolak-balik manggil API terus-terusan yang bisa bikin server kamu ngambek!
import React, { useState, useEffect } from 'react';
function MyComponent() {
const [dataPosts, setDataPosts] = useState([]);
useEffect(() => {
// Fungsi ini bakal jalan pas komponen pertama kali di-mount
// Di sini kita bakal manggil API
console.log('Mulai ngambil data dari API...');
// ... logika ambil data di sini ...
// Array kosong [] sebagai dependensi artinya useEffect ini cuma jalan sekali,
// mirip componentDidMount di class component.
}, []);
return (
<div>
{/* ... */}
</div>
);
}
Ngambil Data Pakai fetch()
Browser modern sekarang punya API bawaan yang namanya fetch(). Ini adalah cara paling umum dan gampang buat ngelakuin HTTP request, termasuk GET (ngambil data), POST (ngirim data), PUT (update data), dan DELETE (hapus data). Untuk ambil data, kita cuma perlu nge-GET aja.
fetch() ini sifatnya asinkronus dan bakal mengembalikan sebuah Promise. Jadi, kita bisa pakai .then() dan .catch(), atau yang lebih modern dan gampang dibaca: async/await. Mari kita lihat contoh sederhananya.
// Contoh sederhana pakai fetch dan async/await
async function getData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1'); // Contoh API publik
if (!response.ok) { // Cek kalo responsenya error (misal: 404 Not Found)
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json(); // Ubah response jadi JSON
console.log('Data sukses diambil:', data);
return data;
} catch (error) {
console.error('Ada error pas ngambil data:', error);
return null;
}
}
// Cara panggilnya:
getData(); // Fungsi ini akan jalan dan menampilkan data di console
Mantap, kan? Simpel tapi powerful. Kita pake JSONPlaceholder sebagai API "palsu" buat latihan. API ini gratis dan sering dipakai buat simulasi.
Implementasi di Komponen React: Step by Step
Oke, sekarang kita gabungin semua jurus itu ke dalam satu komponen React. Kita bakal bikin komponen sederhana yang bisa ngambil data postingan dari API dan nampilinnya di layar. Siapin ngopi dulu ya, biar fokus!
1. Siapin State Buat Nyimpan Data
Pertama, kita perlu state buat nyimpan data yang bakal kita ambil, status loading (biar user tahu kalau data lagi diambil), dan kalau-kalau ada error. Ini penting banget biar user experience-nya bagus. Jangan sampai user nunggu tanpa kepastian!
import React, { useState, useEffect } from 'react';
function DataFetcher() {
const [posts, setPosts] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
// ... nanti di sini kita pakai useEffect
return (
<div>
<h3>Daftar Postingan dari API</h3>
{/* Nanti data ditampilkan di sini */}
</div>
);
}
export default DataFetcher;
2. Pakai useEffect Buat Manggil API
Selanjutnya, kita pakai useEffect buat manggil fungsi fetch(). Kita bungkus logika fetch di dalam fungsi asinkronus biar kodenya rapi dan bisa pakai await. Jangan lupa set `loading` jadi `false` setelah data berhasil diambil atau kalau ada error!
import React, { useState, useEffect } from 'react';
function DataFetcher() {
const [posts, setPosts] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchPosts = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts?_limit=5'); // Ambil 5 postingan
if (!response.ok) {
throw new Error(`Gagal ngambil data: ${response.status}`);
}
const data = await response.json();
setPosts(data); // Simpan data ke state posts
} catch (err) {
setError(err.message); // Simpan error ke state error
} finally {
setLoading(false); // Apapun yang terjadi (sukses/gagal), loading selesai
}
};
fetchPosts();
}, []); // Array kosong berarti cuma jalan sekali pas komponen pertama di-render
// ... render UI di sini
return (
<div>
<h3>Daftar Postingan dari API</h3>
{/* Nanti data ditampilkan di sini */}
</div>
);
}
export default DataFetcher;
3. Nampilin Data ke Layar
Terakhir, kita tinggal tampilin data, status loading, atau pesan error di JSX kita. Ini bagian paling seru karena kita bisa lihat hasil kerja keras kita! Jangan lupa pakai kondisional rendering ya, biar rapi.
import React, { useState, useEffect } from 'react';
function DataFetcher() {
const [posts, setPosts] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchPosts = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts?_limit=5');
if (!response.ok) {
throw new Error(`Gagal ngambil data: ${response.status}`);
}
const data = await response.json();
setPosts(data);
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
};
fetchPosts();
}, []);
if (loading) {
return <div><p>Loading data, sabar ya... lagi diseduhin kopi.</p></div>;
}
if (error) {
return <div><p style="color: red;">Error: {error}. Tolong cek koneksi internet atau API-nya lagi bobo!</p></div>;
}
return (
<div>
<h3>Daftar Postingan dari API</h3>
<ul>
{posts.map(post => (
<li key={post.id}>
<strong>{post.title}</strong>
<p><em>{post.body}</em></p>
</li>
))}
</ul>
</div>
);
}
export default DataFetcher;
Voila! Sekarang kamu punya komponen React yang bisa ngambil data dari API eksternal dengan elegan. Lumayan lah buat modal nembak gebetan anak IT!
Error Handling: Biar Aplikasi Gak Gampang Ambruk
Penting banget nih, kawan-kawan! Jangan cuma mikirin data sukses diambil, tapi juga siapin payung sebelum hujan. Kalau API-nya lagi down, koneksi internet putus, atau datanya gak sesuai harapan, aplikasi kamu jangan sampai crash dan muncul layar putih kematian. Makanya, kita pakai try...catch di dalam fungsi fetchPosts. Ini ibaratnya kita lagi ngambil air, kalau ternyata airnya keruh atau embernya bocor, kita langsung tahu dan bisa kasih peringatan.
Dalam kode di atas, kita sudah mengimplementasikan error handling sederhana. Jika ada masalah saat fetching atau respons dari API tidak OK, kita akan menangkap error tersebut dan menyimpannya di state error, lalu menampilkannya ke user. Ini membuat aplikasi kita lebih robust dan user-friendly.
Latihan: Studi Kasus Lucu Bikin Data Resep Mie Instan
Biar ilmu ngodingnya makin nempel, yuk kita latihan! Anggaplah kamu seorang developer di perusahaan "Mie Instan Nusantara", dan bos kamu minta kamu bikin aplikasi React sederhana untuk menampilkan data resep mie instan paling viral. Sayangnya, datanya masih pakai API "palsu" dari JSONPlaceholder karena database aslinya masih di-deploy sama tim backend yang hobi lembur sampai lupa mandi.
Tugas kamu:
- Buat komponen React baru, misalnya
ResepMieInstan. - Di dalam komponen itu, ambil data dari API
https://jsonplaceholder.typicode.com/posts?_limit=3. Anggap saja setiap "post" itu adalah satu resep mie instan. - Tampilkan judul (
title) sebagai nama resep, dan isi (body) sebagai deskripsi singkat resepnya. - Jangan lupa tambahin indikator loading ("Lagi nyeduh mie, sabar ya...") dan pesan error kalau API-nya ngambek.
- Berikan sentuhan humor ala pecinta mie instan di tampilan data atau pesan loading/error.
Tips: Kamu bisa copas kodingan di atas dan modifikasi sesuai kebutuhan. Ingat, ngoding itu bukan cuma tentang bener, tapi juga rapi dan bisa ngelucu dikit! Semangat ngoding, dan jangan lupa ngopi!
Gimana, seru kan belajar ngambil data dari API? Ini adalah skill fundamental yang wajib kamu kuasai. Dengan ini, pintu menuju aplikasi React yang lebih dinamis dan interaktif sudah terbuka lebar. Di part selanjutnya, mungkin kita bakal bahas cara ngirim data ke API atau pakai library fetching yang lebih canggih seperti Axios. Jadi, stay tune ya! Jangan sampai ketinggalan, apalagi sampai lupa nge-save kodingan. Nanti nangis di pojokan pas laptopnya mati.
