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üÖrnekAraç
Server stateÜrün listesi, kullanıcı profiliTanStack Query, SWR, RSC
URL stateFiltreler, sayfa, sekmesearchParams, router
Form stateForm alanları, validasyonReact Hook Form, useActionState
Lokal UI stateModal açık mı, hoveruseState, useReducer
Global client stateTema, sepet, auth bilgisiContext, Zustand, Redux Toolkit
Türetilmiş stateToplam fiyat, filtrelenmiş listeRender 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'ı useEffect ile 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.

  1. Bir autocomplete (typeahead) arama bileşenini nasıl tasarlarsınız?ZorFrontend Sistem TasarımıFrontend
  2. Bir frontend sistem tasarımı mülakatına nasıl yaklaşırsınız? Hangi adımları izlersiniz?KolayFrontend Sistem TasarımıFrontend
  3. Offline-first çalışan bir web uygulamasını (ör. not alma uygulaması) nasıl tasarlarsınız?ZorFrontend Sistem TasarımıFrontend
  4. Çok dilli (i18n) bir frontend uygulamasını nasıl tasarlarsınız?OrtaFrontend Sistem TasarımıFrontend
  5. Micro-frontend mimarisi nedir? Ne zaman tercih edilir, dezavantajları nelerdir?ZorFrontend Sistem TasarımıFrontend
  6. Şirket genelinde kullanılacak bir design system / component library nasıl kurarsınız?OrtaFrontend Sistem TasarımıFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle