TanStack Query: Server State Management
Kelola data server dengan caching, synchronization, dan background updates
Tujuan Pembelajaran
- Bisa setup dan menggunakan TanStack Query
- Menguasai caching, invalidation, dan background refetch
- Mengerti mutations dan optimistic updates
Analogi
TanStack Query:
├── useQuery -> Read server data
├── useMutation -> Write server data
├── QueryClient -> Cache management
└── DevTools -> Debug cache state
TanStack Query adalah library paling populer untuk server state — menggantikan boilerplate Redux untuk data fetching
Penjelasan Konsep
TanStack Query (dulu React Query) adalah library untuk mengelola server state.
Bukan state management library tradisional — lebih seperti caching layer untuk API calls.
Kenapa TanStack Query?
Tanpa TanStack Query,
Kamu harus menulis boilerplate berulang: loading state manual, error handling manual, cache logic manual, refetch logic manual.
Dengan TanStack Query, semua ini di-handle otomatis.
Konsep Kunci: Query Key
Identifier unik untuk setiap query.
Digunakan untuk caching dan invalidation.
Simple key untuk static queries, dynamic key dengan parameter.
Stale While Revalidate
Default behavior — pertama kali fetch dan tampilkan loading, data muncul dan mark as ‘stale’,
Component remount tampilkan cached data sambil refetch di background, window refocus trigger refetch.
Mutations
Untuk operasi write (POST, PUT, DELETE).
Gunakan onSuccess untuk invalidateQueries setelah mutation berhasil.
Optimistic Updates
Update UI sebelum server confirm — untuk UX yang lebih responsif.
Inti yang Perlu Dipahami
Bagian ini berfokus pada bisa setup dan menggunakan TanStack Query., menguasai caching, invalidation, dan background refetch., dan mengerti mutations dan optimistic updates. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.
Saat membaca TanStack Query, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.
Cara Membayangkannya
TanStack Query adalah library paling populer untuk server state — menggantikan boilerplate Redux untuk data fetching. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.
Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.
Saat Melihat Contoh Kode
Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. invalidateQueries menghapus cache dan trigger refetch. onSuccess callback di mutation untuk cache invalidation. isPending untuk loading state saat mutating.
Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.
Konteks dalam Perjalanan Belajar
Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.
Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.
Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.
Contoh Kode
// Complete CRUD dengan TanStack Query
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
function UserList() {
const queryClient = useQueryClient();
const { data: users, isLoading } = useQuery({
queryKey: ['users'],
queryFn: async () => {
const res = await fetch('/api/users');
if (!res.ok) throw new Error('Failed to fetch');
return res.json();
},
staleTime: 1000 * 60 * 5,
});
const deleteMutation = useMutation({
mutationFn: (id) => fetch(`/api/users/${id}`, { method: 'DELETE' }),
onSuccess: () => queryClient.invalidateQueries({ queryKey: ['users'] }),
});
if (isLoading) return <Spinner />;
return (
<ul>
{users?.map(user => (
<li key={user.id}>
{user.name}
<button onClick={() => deleteMutation.mutate(user.id)}>
{deleteMutation.isPending ? 'Deleting...' : 'Delete'}
</button>
</li>
))}
</ul>
);
}Penjelasan Kode
Prompt AI
Refactor satu fitur di aplikasimu dari manual fetch ke TanStack Query. Bandingkan jumlah boilerplate code.
Pertanyaan Reflektif
TanStack Query mengurangi boilerplate data fetching 70-80%. Itu adalah waktu yang bisa dihabiskan untuk fitur yang lebih impactful.