Büyük bir React uygulamasında state management mimarisini nasıl kurgularsınız?
Cevap
İlk adım tüm state'i tek bir global store'a koymak değil, state'i türüne göre sınıflandırmak ve her türü doğru araçla yönetmektir.
| State türü | Örnek | Araç |
|---|---|---|
| Server state | Ürün listesi, kullanıcı profili | TanStack Query, SWR, RSC |
| URL state | Filtreler, sayfa, sekme | searchParams, router |
| Form state | Form alanları, validasyon | React Hook Form, useActionState |
| Lokal UI state | Modal açık mı, hover | useState, useReducer |
| Global client state | Tema, sepet, auth bilgisi | Context, Zustand, Redux Toolkit |
| Türetilmiş state | Toplam fiyat, filtrelenmiş liste | Render sırasında hesapla |
İlkeler
- Server state'i global store'a kopyalamayın. Cache, yeniden çekme, invalidation, loading/error durumları TanStack Query gibi araçların işidir.
- Paylaşılabilir olan URL'de yaşasın: filtrelenmiş bir sayfanın linki kopyalandığında aynı görünüm açılmalı.
- State'i kullanıldığı yere en yakın tutun (colocation); gerekirse yukarı taşıyın.
- Türetilebilen state'i saklamayın:
filteredItems'ıuseEffectile senkronize etmek yerine render sırasında hesaplayın. - Context sık değişen değerler için uygun değildir; tüm consumer'lar yeniden render olur. Seçici (selector) abonelik için Zustand/Redux tercih edin.
// Zustand ile selector: sadece count değişince render
const count = useCartStore((s) => s.items.length);Sonuç olarak çoğu modern uygulamada Redux'a ihtiyaç kalmaz; Query + URL + küçük bir client store yeterlidir.
İlgili Frontend Sistem Tasarımı soruları
- Bir autocomplete (typeahead) arama bileşenini nasıl tasarlarsınız?
- Bir frontend sistem tasarımı mülakatına nasıl yaklaşırsınız? Hangi adımları izlersiniz?
- Offline-first çalışan bir web uygulamasını (ör. not alma uygulaması) nasıl tasarlarsınız?
- Çok dilli (i18n) bir frontend uygulamasını nasıl tasarlarsınız?
- Micro-frontend mimarisi nedir? Ne zaman tercih edilir, dezavantajları nelerdir?
- Şirket genelinde kullanılacak bir design system / component library nasıl kurarsınız?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.