Zustand/Jotai ile İstemci Tarafı Durumu
Zustand veya Jotai kullanarak hafif ve yüksek performanslı istemci tarafı genel durum yönetimi uygulayın.
Zustand/Jotai ile İstemci Tarafı Durumu, CoddyKit'te ücretsiz bir Next.js 15 Fullstack Web Apps dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Next.js 15 Fullstack Web Apps öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Next.js 15 Fullstack Web Apps kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Global State: Beyond Local
In React, you've learned about local state with useState, which is great for data used only within a single component.
But what if data needs to be shared across many components, or deeply nested components, without 'prop drilling' (passing props down through many layers)? This is where client-side global state management comes in.
Global state allows any component to access or update shared data directly, simplifying complex data flows and making your application more maintainable.
Meet Zustand: Simple State
Zustand is a small, fast, and scalable state management solution for React. Its API is simple and hooks-based, making it very intuitive to learn and use.
- Minimalistic: Less boilerplate code.
- Fast: Optimized for performance.
- Flexible: Works with any React component.
- Hooks-based: Feels natural to React developers.
Get Started with Zustand
Before we dive into creating stores, you'll need to install Zustand in your Next.js project. It's a simple npm or yarn command.
Open your terminal in the project root and run:
npm install zustandOr if you prefer Yarn:
yarn add zustandOnce installed, you're ready to define your first store!
Crafting a Zustand Store
A Zustand store is created using the create function. This function takes a callback that defines your initial state and actions.
Think of a store as a central hub for specific pieces of global data. Let's create a basic counter store:
import { create } from 'zustand';
// Define your store
const useCounterStore = create((set) => ({
count: 0,
}));
// This store can be imported and used in your React components.
// It's not runnable on its own, but defines the global state structure.Store State & Actions
Beyond just holding state, a store also contains actions – functions that modify the state. The set function provided by Zustand allows you to update the store's state.
Here's how we add increment and decrement actions to our counter store:
import { create } from 'zustand';
const useCounterStore = create((set) => ({
count: 0,
// Action to increment count
increment: () => set((state) => ({ count: state.count + 1 })),
// Action to decrement count
decrement: () => set((state) => ({ count: state.count - 1 })),
}));
// This store now has both state (count) and actions (increment, decrement).Connect Components to Store
To use the global state in your React components, you simply import the store hook (e.g., useCounterStore) and call it. You can select specific pieces of state or actions.
Let's create a component that displays the current count from our store:
import { create } from 'zustand';
// Define your store (as in previous scenes)
const useCounterStore = create((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 })),
}));
// A React component that uses the store
export default function CounterDisplay() {
// Select the 'count' state from the store
const count = useCounterStore((state) => state.count);
return (
<div>
<p>Current Count: {count}</p>
</div>
);
}
// This component can be rendered in a Next.js page or another component.Interactive Counter Example
Now let's make our counter interactive! We'll add buttons that call the increment and decrement actions defined in our store.
This shows how components can both read from and write to the global state, keeping everything synchronized.
import { create } from 'zustand';
// Define your store
const useCounterStore = create((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 })),
}));
// A React component that uses the store and its actions
export default function InteractiveCounter() {
// Select both state and actions
const { count, increment, decrement } = useCounterStore();
return (
<div>
<p>Count: {count}</p>
<button onClick={decrement}>Decrement</button>
<button onClick={increment}>Increment</button>
</div>
);
}
// This component is fully runnable and demonstrates Zustand in action.Efficient State Selection
By default, if any part of the store's state changes, components that use the store might re-render. To optimize this, you can use selectors.
A selector is a function you pass to useStore that picks only the specific data your component needs. If only that selected data changes, the component re-renders.
import { create } from 'zustand';
// A more complex store with multiple states
const useSettingsStore = create((set) => ({
theme: 'dark',
fontSize: 16,
toggleTheme: () => set((state) => ({ theme: state.theme === 'dark' ? 'light' : 'dark' })),
setFontSize: (size) => set({ fontSize: size }),
}));
// Component only cares about 'theme'
export default function ThemeDisplay() {
// Using a selector to only subscribe to 'theme'
const theme = useSettingsStore((state) => state.theme);
return (
<p>Current Theme: <b>{theme}</b></p>
);
}
// If fontSize changes, ThemeDisplay will NOT re-render because it only selects 'theme'.Zustand Best Practices
To keep your Zustand stores clean and efficient:
- Immutability: Always update state immutably. Don't directly modify objects or arrays in state; create new ones.
- Separate Concerns: Keep related state and actions in the same store. Create multiple stores for different domains (e.g.,
useUserStore,useCartStore). - Selectors: Use selectors to prevent unnecessary re-renders in components.
- Middleware: For advanced features like persistence or logging, explore Zustand's middleware options.
Zustand Knowledge Check
Zustand offers a flexible and lightweight approach to global state management. Based on what you've learned, choose the correct statements about its benefits and characteristics.
Zustand: A Quick Recap
Congratulations! You've learned the fundamentals of client-side global state management with Zustand.
- We explored why global state is essential for complex apps.
- You saw how to define a Zustand store with state and actions using
create. - We learned to connect React components to the store and interact with its state and actions.
- Finally, we discussed how selectors can optimize component re-renders.
Zustand empowers you to manage shared data efficiently, making your Next.js applications more scalable and easier to maintain.
Yapay zeka eğitmeniyle TypeScript öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 12
- Dersler
- 48
Sıkça Sorulan Sorular
“Zustand/Jotai ile İstemci Tarafı Durumu” dersi ücretsiz mi?
Evet — “Zustand/Jotai ile İstemci Tarafı Durumu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Next.js 15 Fullstack Web Apps kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Next.js 15 Fullstack Web Apps kursu toplamda 4 dersten oluşur.
“Zustand/Jotai ile İstemci Tarafı Durumu” dersinde ne öğreneceğim?
Zustand veya Jotai kullanarak hafif ve yüksek performanslı istemci tarafı genel durum yönetimi uygulayın. Next.js 15 Fullstack Web Apps ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Next.js 15 Fullstack Web Apps öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Next.js 15 Fullstack Web Apps, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Zustand/Jotai ile İstemci Tarafı Durumu” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Next.js 15 Fullstack Web Apps dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Next.js 15 Fullstack Web Apps dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sunucu Durumu için React Query
- Zustand/Jotai ile İstemci Tarafı Durumu
- Sunucu Tarafı Önbelleğe Alma Stratejileri
- İyimser Güncellemeler ve Önbellek Geçersizleştirme