State Management
Global State Savaşı:
Redux vs Zustand
Yıllarca "Redux boilerplate" yazdık. Sonra Context API geldi ama performans sorunları yarattı. Şimdi ise Zustand gibi "atomic" ve "hook-based" çözümler revaçta. Peki hangisini, ne zaman seçmeliyiz?
01. Evrim Süreci
State yönetimi kararı artık "Redux kullanayım mı?" değil, "Global state'e gerçekten ihtiyacım var mı?" sorusuyla başlar. React Query (TanStack Query) gibi server-state kütüphaneleri, client-state ihtiyacımızı %80 oranında azalttı. Geriye kalan %20'lik dilim (UI state) için ise araçlar değişti.
Redux (The Giant)
Avantaj: Tek yönlü veri akışı (flux), güçlü DevTools, middleware (Thunk/Saga) ekosistemi. Kurumsal ve çok büyük ekipler için standartlaşma sağlar.
Dezavantaj: Çok fazla boilerplate kod. Basit bir işlem için bile action, reducer, selector yazmak gerekir (Redux Toolkit bunu azaltsa da mantık aynıdır).
Zustand (The Modern)
Avantaj: Minimalist. Provider sarmalaması (wrapper hell) gerektirmez. Hook tabanlıdır. Bundle size çok küçüktür (~1KB).
Dezavantaj: Redux kadar katı bir yapısı olmadığı için ekip içinde disiplin gerektirir.
02. Kod Karşılaştırması
Basit bir sayaç uygulaması üzerinden boilerplate farkına bakalım.
Redux Toolkit
// 1. Slice Oluştur
const counterSlice = createSlice({
name: 'counter',
initialState: { value: 0 },
reducers: {
increment: state => { state.value += 1 }
}
})
// 2. Store'a Ekle
const store = configureStore({
reducer: { counter: counterSlice.reducer }
})
// 3. Component İçinde Kullan
const count = useSelector(state => state.counter.value)
const dispatch = useDispatch()
// dispatch(counterSlice.actions.increment())
Zustand
// 1. Store Oluştur (Hook olarak)
const useStore = create(set => ({
count: 0,
increment: () => set(state => ({ count: state.count + 1 }))
}))
// 2. Component İçinde Kullan
const { count, increment } = useStore()
// Provider'a gerek yok, direkt kullan!
03. Karar Matrisi
- Server State (API verisi) ağırlıklı mı?
Global state kullanma.React QueryveyaSWRkullan. - Sadece Theme/User Auth gibi az değişen veriler mi?
React Context APIyeterli. Ekstra kütüphaneye gerek yok. - Kompleks UI State (Filtreler, Modallar, Sepet) mi?
Modern ve hızlı çözüm içinZustand. Eğer proje çok büyükse ve katı kurallar gerekiyorsaRedux Toolkit.