State Management
Panduan pemilihan dan penggunaan state management per platform.
Rekomendasi per Platform
| Platform | Local State | Global State | Server State |
|---|---|---|---|
| Android | remember / mutableStateOf | StateFlow di ViewModel | — |
| iOS | @State | @Observable ViewModel | — |
| Flutter | setState | Bloc/Cubit atau Riverpod | — |
| RN CLI | useState | Zustand | TanStack Query |
| RN Expo | useState | Zustand | TanStack Query |
Prinsip
- Single Source of Truth — Setiap data hanya memiliki satu sumber kebenaran.
- Unidirectional Data Flow — Data mengalir satu arah: Action → State → UI.
- Immutable State — State tidak boleh dimutasi langsung, harus membuat state baru.
- Minimal Global State — Hanya state yang benar-benar perlu dibagikan antar screen yang menjadi global state.
Kapan Menggunakan Apa?
| Tipe State | Contoh | Solusi |
|---|---|---|
| UI State | Expanded/collapsed, form input | Local state (useState, @State, remember) |
| Screen State | Loading/success/error | ViewModel / Cubit |
| App State | User session, theme | Global store (Zustand, Riverpod) |
| Server State | API data, cache | TanStack Query / manual cache |
tip
Untuk React Native, gunakan TanStack Query untuk server state (API data) dan Zustand untuk client state (app state). Jangan simpan API response di Zustand — biarkan TanStack Query yang mengelola cache.