React.js adalah salah satu library JavaScript paling populer untuk membangun antarmuka pengguna (UI). Salah satu aspek penting dalam pengembangan aplikasi web menggunakan React adalah pengambilan data atau data fetching. Ini adalah proses mengambil data dari sumber eksternal, seperti API, database, atau file, untuk digunakan dalam komponen React.
Dalam aplikasi modern, kebanyakan data disimpan di server, dan UI hanya bertindak sebagai antarmuka yang menampilkan data tersebut kepada pengguna. Data fetching memungkinkan komponen React untuk mengambil data ini secara dinamis dan menampilkannya. Tanpa data fetching, aplikasi hanya akan menampilkan data statis, yang tentunya kurang menarik dan tidak interaktif.
fetch adalah API bawaan di JavaScript yang digunakan untuk mengambil sumber daya dari server. Berikut adalah contoh sederhana menggunakan fetch di React:
import React, { useEffect, useState } from 'react';
function DataFetchingComponent() {
const [data, setData] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
setData(data);
setLoading(false);
})
.catch(error => {
console.error('Error fetching data:', error);
setLoading(false);
});
}, []);
if (loading) {
return <p>Loading...</p>;
}
return (
<div>
<h1>Data</h1>
<ul>
{data.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
</div>
);
}
export default DataFetchingComponent;
Dalam contoh di atas, kita menggunakan useEffect untuk menjalankan operasi fetch ketika komponen dipasang (mounted). useState digunakan untuk menyimpan data yang diambil dan status loading.
axios adalah library pihak ketiga yang mempermudah proses HTTP request, terutama untuk kasus yang lebih kompleks seperti penanganan interceptors atau request cancellation. Berikut contoh implementasinya:
import React, { useEffect, useState } from 'react';
import axios from 'axios';
function DataFetchingComponent() {
const [data, setData] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
axios.get('https://api.example.com/data')
.then(response => {
setData(response.data);
setLoading(false);
})
.catch(error => {
console.error('Error fetching data:', error);
setLoading(false);
});
}, []);
if (loading) {
return <p>Loading...</p>;
}
return (
<div>
<h1>Data</h1>
<ul>
{data.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
</div>
);
}
export default DataFetchingComponent;
axios memberikan API yang lebih bersih dan beberapa fitur tambahan dibandingkan dengan fetch.
Untuk manajemen data fetching yang lebih kompleks, seperti caching dan synchronisasi data, React Query adalah solusi yang sangat populer. Dengan React Query, pengelolaan data fetching bisa dilakukan dengan lebih efisien dan lebih sedikit kode.
import React from 'react';
import { useQuery } from 'react-query';
import axios from 'axios';
function DataFetchingComponent() {
const { data, error, isLoading } = useQuery('fetchData', () =>
axios.get('https://api.example.com/data').then(res => res.data)
);
if (isLoading) return <p>Loading...</p>;
if (error) return <p>Error fetching data</p>;
return (
<div>
<h1>Data</h1>
<ul>
{data.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
</div>
);
}
export default DataFetchingComponent;
Dengan React Query, kita tidak perlu khawatir tentang manajemen loading state, error handling, atau caching, karena semua itu ditangani secara otomatis.
Data fetching adalah komponen penting dalam pengembangan aplikasi React.js. Dengan menggunakan metode seperti fetch, axios, atau React Query, pengembang dapat mengambil dan menampilkan data dari server secara efisien dan efektif. Memahami berbagai teknik dan alat untuk data fetching akan membantu dalam membangun aplikasi yang lebih dinamis dan responsif.