Back to Blog Web Fundamentals

State Management pada Web Modern

Masalah state management biasanya bukan “library mana yang terbaik”, melainkan data mana yang hidup di URL, komponen, cache server, atau penyimpanan global. Salah menaruh state membuat aplikasi sulit dipahami dan mudah tidak sinkron.

URL statefilter, page, tab
Server statedata API & cache
UI statemodal, menu, draft
Persistent statepreferensi terpilih

Taruh state sedekat mungkin dengan pemakainya

Dropdown yang hanya dipakai satu komponen tidak perlu masuk global store. State global menambah coupling dan membuat perubahan kecil memicu render atau subscriber yang tidak relevan.

Server state berbeda dari client state

Data produk dari API memiliki masalah cache, stale time, retry, deduplication, dan invalidation. Library query cache menangani masalah ini lebih baik daripada menyalin semua respons API ke store global.

JavaScript
const products = useQuery({
  queryKey: ['products', filters],
  queryFn: () => api.getProducts(filters),
  staleTime: 30_000,
});
const update = useMutation({
  mutationFn: api.updateProduct,
  onSuccess: () => queryClient.invalidateQueries({ queryKey: ['products'] }),
});

Hindari derived state ganda

JavaScript
// Jangan simpan filteredProducts jika bisa dihitung.
const filteredProducts = useMemo(
  () => products.filter(item => item.name.includes(keyword)),
  [products, keyword]
);

Ukur render dan ukuran bundle

Optimasi state hanya berguna jika mengurangi pekerjaan nyata. Gunakan profiler untuk melihat komponen yang sering render, periksa selector store, dan jangan mememoisasi semua hal tanpa bukti.

Jenis stateLokasi yang masuk akal
Tab aktif halamanURL atau local component
Data user saat iniQuery cache / auth context
Draft form panjangForm state, opsional autosave
Tema penggunaPersistent preference
Notifikasi sementaraEvent/toast system
Daftar dari APIServer-state cache

Arsitektur yang sehat biasanya menggunakan beberapa mekanisme kecil, bukan satu global store untuk seluruh aplikasi.

Share this article

Related articles

Copied