Zustand Nedir? Basit, Hızlı, Ölçeklenebilir State Management
Zustand ile sıfır boilerplate'e yakın global state yönetimi. Store oluşturma, selectors, async actions, persist middleware ve TypeScript desteği.
Zustand, React uygulamaları için tasarlanmış küçük, hızlı ve ölçeklenebilir bir global state management kütüphanesidir. Provider gerektirmez, Redux'a oranla minimum boilerplate ile çalışır ve TypeScript desteği baştan beri birinci sınıftır. Selectors ile gereksiz re-render'ları yazılı bir şekilde önler, persist middleware ile state'i localStorage'a kalıcı yazabilirsiniz. Bu rehberde infografikteki bölümleri açarak temel kullanımdan ileri pattern'lere kadar adım adım giderek tüm Zustand iş akışını gösteriyoruz.
Zustand Nedir?
React için küçük, hızlı ve ölçeklenebilir bir state management kütüphanesidir. Reducer/action/dispatch boilerplate'i olmadan; çağrılan bir hook ile state ve setter elde edersiniz.
- Daha az boilerplate
- Minimal setup
- Built-in React desteği
- Hem küçük hem büyük uygulamalar için
Neden Zustand?
Zustand'ın getirdiği avantajlar:
- Provider gerektirmez
- Minimal API
- TypeScript ile yerleşik destek
- React Native API'siyle uyumlu
- Redux'a göre çok daha hafif (small footprint)
Kurulum
Tek paket; runtime bağımlılığı olarak kurulur.
npm install zustandBir Store Oluşturma (Temel Fikir)
create fonksiyonu, set'i alan bir factory ile state ve action'ları döndürür. Hook olarak kullanılabilir.
import { create } from "zustand";
type CounterState = {
count: number;
increment: () => void;
decrement: () => void;
};
export const useCounter = create<CounterState>((set) => ({
count: 0,
increment: () => set((s) => ({ count: s.count + 1 })),
decrement: () => set((s) => ({ count: s.count - 1 })),
}));Store'u Kullanma
Store, doğrudan bir hook'tur. Değer ve action'ları okumak için çağırırsınız; component'i içine sarmaya gerek yok.
function Counter() {
const { count, increment } = useCounter();
return (
<button onClick={increment}>
Count: {count}
</button>
);
}Selectors (ÖNEMLİ)
Yalnızca ihtiyaç duyduğunuz alanı seçmek için selector geçirin. Bu, sadece o alan değiştiğinde re-render olmasını sağlar — performans için kritiktir.
const count = useCounter((s) => s.count);
const increment = useCounter((s) => s.increment);Async Actions
Store içinde async fonksiyon tanımlayıp set'i çağırabilirsiniz. Veri çekme, login gibi async işler de doğal akışta yer alır.
export const useUsers = create((set) => ({
users: [],
loading: false,
fetchUsers: async () => {
set({ loading: true });
const res = await fetch("/api/users");
const users = await res.json();
set({ users, loading: false });
},
}));Persist Middleware
persist middleware, store içeriğini localStorage'a yazar. Sayfa yenilense bile state korunur. sessionStorage veya custom storage da kullanılabilir.
import { create } from "zustand";
import { persist } from "zustand/middleware";
export const useTheme = create(
persist<{ theme: "light" | "dark"; toggle: () => void }>(
(set) => ({
theme: "light",
toggle: () =>
set((s) => ({ theme: s.theme === "light" ? "dark" : "light" })),
}),
{ name: "theme" }
)
);Temel Kavramlar
Zustand ile sürekli karşılaşacağınız parçalar:
- create — store oluşturmak
- set / get — state güncellemek ve okumak
- selectors — sadece ihtiyacınızı dinlemek
- persist — state'i kalıcı yazmak
- subscriber — store dışında dinlemek
- middleware — devtools, persist, immer vb.
Zustand vs Redux
İkisinin temel farkları:
- Zustand: minimal boilerplate, provider yok, hızlı kurulum
- Redux: action/reducer/dispatch, daha katı yapı, daha fazla setup
- Zustand modern projelerde gittikçe yaygınlaşıyor
- Redux Toolkit, klasik Redux'a göre boilerplate'i azaltır ama yine de ağırdır
Kullanım Alanları
Zustand'ın özellikle parladığı senaryolar:
- Global UI state (theme, modal, sidebar)
- Paylaşılan client state
- Küçük-orta ölçekli uygulamalar
- React Native uygulamaları
- Form draft/auto-save state
Özet
Zustand; basit, hızlı ve performanslıdır. Boilerplate'i minimum tutar, mükemmel geliştirici deneyimi sunar ve modern React uygulamaları için harika bir varsayılan tercihtir. Server state için React Query, client state için Zustand kombinasyonu modern stack'lerde en yaygın görünen ikilidir.
Sıkça Sorulan Sorular
Bu konuda en çok merak edilenler.
Zustand mı, Redux Toolkit mi?
Yeni projelerde Zustand çoğu zaman yeterli ve daha az boilerplate getirir. Çok büyük ekipler, katı action history takibi veya devtools temelli iş akışı isteyenler için Redux Toolkit hâlâ güçlü bir seçim.
Server state için de kullanılır mı?
Kullanılabilir ama önerilmez. React Query/TanStack Query gibi server state'e özel kütüphaneler cache, deduplication ve refetch konusunda çok daha üstündür. Zustand'ı client state için kullanın.
TypeScript ile zorluk yaşar mıyım?
Hayır — Zustand'ın TS desteği güçlüdür. create<TState>() jenerik kullanımıyla tüm action ve state tipleri çıkarsanır. Sadece middleware kombinasyonlarında dikkatli tip imzaları gerekir.
Birden fazla store olur mu?
Evet, idealdir. Her domain için ayrı store oluşturmak (auth, cart, ui) Zustand'ın önerdiği yaklaşımdır. Tek bir mega store yerine küçük store'larla daha temiz ve test edilebilir bir mimari kurarsınız.
DevTools desteği var mı?
Evet — devtools middleware'i ile Redux DevTools'a action gönderebilirsiniz. Geliştirme sırasında state geçmişini görmek ve debug yapmak için çok kullanışlıdır.
İlgili İçerikler
Bu konuyla bağlantılı diğer infografikler.
- ReactFrontend
React Query Nedir? Axios ve TypeScript ile Mutation Rehberi
React Query (TanStack Query) ile Axios baseURL ayarı, login mutation, create user ve update user hook'larını TypeScript ile kurun.
- ReactFrontend
Next.js Nedir? Production için React Framework'ü
Next.js (App Router) ile fullstack React uygulamaları geliştirin. SSR, SSG, ISR, API routes, Server Components ve performans avantajlarının pratik rehberi.
- ReactFrontend
React Router v7 Nedir? Declarative Routing Rehberi
React Router v7 ile React uygulamalarında declarative routing. BrowserRouter, Routes, Link, useNavigate, nested routes ve protected routes.
Daha fazla developer infografiği keşfedin
Yeni içerikleri kaçırmamak için ana sayfayı ziyaret edin.
Tüm infografikleri gör