Zust2help Info
import devtools, persist from 'zustand/middleware' const useStore = create( devtools( persist( (set) => ( /* state */ ), name: 'app-storage' ) ) ) const useStore = create((set, get) => ( user: null, loading: false, fetchUser: async (id) => set( loading: true ) const response = await fetch(`/api/user/$id`) const user = await response.json() set( user, loading: false ) , )) 4. Accessing Store Outside React // In a utility function or plain JS module import useStore from './store' // Get current state const currentState = useStore.getState()
import create from 'zustand' import persist from 'zustand/middleware' const useStore = create( persist( (set) => ( user: null, token: '', setUser: (user) => set( user ), ), zust2help
// Example: Only persist on client side const useStore = create( persist( (set) => ( /* state */ ), name: 'my-store', getStorage: () => if (typeof window !== 'undefined') return localStorage return dummyStorage , ) ) 1. Splitting Stores Avoid one giant store. Split by domain. Split by domain
const useStore = create((set) => ( count: 0, increment: () => set((state) => ( count: state.count + 1 )), decrement: () => set((state) => ( count: state.count - 1 )), )) Using Redux DevTools Wrap your store with devtools() : ( count: 0
Use persist with a skipHydration option or conditionally access storage.
// Bad — re-renders on any state change const count, increment, user = useStore() // Good — re-renders only when count changes const count = useStore((state) => state.count) const increment = useStore((state) => state.increment) Issue: Event handlers or useEffect closures capture old state.