Kamu sedang membaca artikel ke-12. Ingin melihat semua topik dari awal sampai mahir? Cek daftar isi lengkap serinya!
🗂️ Lihat Daftar Isi Seri →Bayangkan kamu sudah susah-payah bikin tampilan Vue yang keren — komponen rapi, state terkelola, routing beres. Tapi datanya masih hardcode di dalam kode. Mana seru? Nah, inilah saatnya kamu belajar fetch API Vue 3: menghubungkan aplikasi kamu ke dunia luar alias backend server yang nyata. Di artikel ke-12 dari seri Vue from Zero to Zorro ini, kita akan pakai axios vue 3 — library HTTP client paling populer — untuk ambil data, tampilkan ke UI, dan tangani loading serta error seperti developer profesional. Siap? Gas! 🚀
🤔 Axios vs Fetch Biasa — Mana yang Lebih Oke untuk Vue 3?
JavaScript sebenarnya sudah punya bawaan namanya fetch() API. Tapi para developer senior kebanyakan pilih Axios. Kenapa? Analogi sederhananya begini:
Fetch bawaan itu seperti naik ojek tanpa aplikasi — bisa, tapi kamu harus negosiasi sendiri, nunggu di pinggir jalan, dan kalau hujan ya urusan kamu. Axios itu seperti punya Grab dengan fitur lengkap: bisa set default header sekalian, interceptor otomatis, error handling yang lebih manusiawi, dan cancel request kalau diperlukan.
XMLHttpRequest dengan API yang bersih, mendukung interceptor, transformasi data otomatis, dan cancel token — jauh lebih ergonomis dibanding fetch() native untuk proyek skala menengah ke atas.
| Fitur | fetch() Native | Axios |
|---|---|---|
| Parse JSON otomatis | ❌ Manual .json() | ✅ Otomatis |
| Error HTTP (4xx/5xx) | ❌ Tidak throw error | ✅ Langsung throw |
| Default headers global | ❌ Set tiap request | ✅ Bisa sekali atur |
| Interceptors | ❌ Tidak ada | ✅ Request & Response |
| Upload progress | ⚠️ Susah | ✅ Built-in |
| Browser support lama | ⚠️ Butuh polyfill | ✅ Aman |
⚙️ Cara Install dan Setup Axios Vue 3 — Langkah demi Langkah
Oke, cukup teorinya. Sekarang kita praktik! Pastikan kamu sudah punya project Vue 3 yang dibuat dengan Vite (kalau belum, cek artikel-artikel sebelumnya di seri ini ya). Ikuti langkah-langkah berikut:
Buka terminal di folder project Vue kamu, lalu jalankan perintah ini:
npm install axios
# atau pakai yarn
yarn add axios
Buat file src/api/axios.js untuk konfigurasi terpusat. Ini cara profesional yang bikin kode lebih rapi:
// Buat instance khusus dengan base URL
const apiClient = axios.create({
baseURL: 'https://jsonplaceholder.typicode.com',
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
export default apiClient
baseURL dari environment variable supaya mudah ganti antara development dan production: import.meta.env.VITE_API_URL. Taruh di file .env di root project kamu.onMountedBuat komponen PostList.vue. Di sini kita pakai Composition API dan ambil data dari JSONPlaceholder (API publik gratis untuk latihan):
<template>
<div class="post-list">
<h2>📋 Daftar Post</h2>
<!-- Loading State -->
<div v-if="loading">⏳ Memuat data...</div>
<!-- Error State -->
<div v-else-if="error">❌ {{ error }}</div>
<!-- Data State -->
<ul v-else>
<li v-for="post in posts" :key="post.id">
<strong>{{ post.title }}</strong>
<p>{{ post.body }}</p>
</li>
</ul>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import apiClient from '../api/axios'
const posts = ref([])
const loading = ref(false)
const error = ref(null)
const fetchPosts = async () => {
loading.value = true
error.value = null
try {
const { data } = await apiClient.get('/posts?_limit=5')
posts.value = data
} catch (err) {
error.value = 'Gagal memuat data. Coba lagi!'
console.error(err)
} finally {
loading.value = false
}
}
onMounted(fetchPosts)
</script>
- try — jalankan request, simpan data kalau berhasil
- catch — tangkap error (network mati, server 500, dll)
- finally — selalu dijalankan, cocok untuk matikan loading spinner
Pola ini adalah gold standard untuk semua operasi async di Vue 3!
🎨 Tampilkan Data Real di UI — Loading State, Error Handling & UX Terbaik
Fetch data berhasil itu bagus. Tapi user experience yang baik juga butuh: loading spinner saat nunggu, pesan error yang informatif, dan tampilan data yang bersih. Di sinilah Vue 3 bersinar — reaktivitasnya bikin semua ini semudah ganti nilai variabel!
Ganti teks "⏳ Memuat data..." dengan skeleton placeholder menggunakan CSS sederhana:
<div v-if="loading" class="skeleton-wrapper">
<div
v-for="n in 5"
:key="n"
style="height:60px;background:#e2e8f0;border-radius:8px;margin-bottom:12px;animation:pulse 1.5s infinite"
></div>
</div>
Tidak cuma ambil data, Axios juga bisa kirim data. Contoh membuat post baru:
try {
const { data } = await apiClient.post('/posts', {
title: 'Post dari Vue 3',
body: 'Ini dikirim pakai Axios!',
userId: 1
})
console.log('Post baru:', data)
// tambahkan ke array posts lokal
posts.value.unshift(data)
} catch (err) {
console.error('Gagal buat post:', err)
}
}
🛡️ Axios Interceptors — Fitur Rahasia yang Bikin Fetch API Vue 3 Makin Powerful
Interceptors itu seperti "petugas keamanan" di antara kamu dan server. Setiap request yang keluar bisa "dicegat" dulu — misalnya buat nambahin token autentikasi otomatis. Setiap response yang masuk pun bisa diproses dulu — misalnya handle error 401 (Unauthorized) secara global.
Tambahkan ini di file src/api/axios.js:
apiClient.interceptors.request.use(
config => {
const token = localStorage.getItem('auth_token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
}
)
// Interceptor RESPONSE — handle error global
apiClient.interceptors.response.use(
response => response,
error => {
if (error.response?.status === 401) {
console.warn('Session habis, arahkan ke login')
// router.push('/login')
}
return Promise.reject(error)
}
)
.env) atau ambil dari state management (Pinia — yang sudah kamu pelajari di artikel 11). Ini bukan paranoid, ini standar keamanan industri.Kamu Sekarang Bisa Bikin Vue 3 "Ngobrol" dengan Server!
Di artikel ini kamu telah belajar bagaimana cara fetch API Vue 3 menggunakan axios vue 3 dengan cara yang benar. Berikut poin-poin utamanya:
- ✓ Axios lebih unggul dari fetch native karena parse JSON otomatis, error handling lebih baik, dan support interceptors
-
✓
Buat instance Axios terpusat di
src/api/axios.jsdengan baseURL dan default headers -
✓
Gunakan pola
try/catch/finallydengan stateloadingdanerroruntuk UX yang baik - ✓ Interceptors memungkinkan kamu otomatis menambah auth token dan handle error HTTP global
- ✓ Kombinasikan Axios dengan Pinia untuk arsitektur aplikasi yang bersih dan scalable
Artikel ini adalah bagian dari seri 16 Artikel Belajar Vue: Vue From Zero to Zorro. Artikel selanjutnya kita akan bahas Composables — cara bikin logika yang bisa dipakai ulang di banyak komponen. Ini fitur yang akan membuat kode Vue kamu jauh lebih rapi dan profesional!
Yuk diskusi bareng! Tulis di kolom komentar: bagian mana dari Axios yang masih bikin bingung? Atau kalau artikel ini membantu, share ke teman-teman yang lagi belajar Vue — bisa jadi ibadah ilmu lho! 🙏
No comments:
Post a Comment