Nextjs state management
Skill ComeOnOliver/skillshub/skills/HoangNguyen0403/agent-skills-standard/nextjs-state-management
Best practices for managing state (Server URL vs Client Hooks). Use when managing URL state, client state, or global state in a Next.js application. (triggers: **/hooks/*.ts, **/store.ts, **/components/*.tsx, useState, useContext, zustand, redux)From its SKILL.md
npx -y skills add ComeOnOliver/skillshub --skill nextjs-state-managementAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
2.6 KB, 580 tokens by cl100k_base, as published. Nobody here has run it
State Management
Priority: P2 (MEDIUM)
Implementation Guidelines
- URL State: Use the URL as the Single Source of Truth for shareable/persistent state. URL params: shareable across reloads and links. Access via
useSearchParams()and update withuseRouter(). Pattern:const params = new URLSearchParams(searchParams); params.set('q', term); useRouter().replace(...). - Server State: Use SWR or TanStack Query (React Query) for caching and fetching server data. Avoid syncing server data manually into
useState. - Client State: Use Zustand (
create<CartState>()((set) => ({ ... }))) — use only in 'use client' components — or Jotai for complex, high-frequency UI state. Avoid Prop Drilling by leveraging Context API only for low-frequency data. - Lifting State: Colocate state as close as possible to the component. Only lift to the parent when state is shared between siblings.
- Next.js 15+ Integration: Ensure state updates in Client Components don't conflict with server-side rendering logic. Manage optimistic updates with the
useOptimistichook. - State Hydration: Be careful when initializing state from
localStoragein Client Components to avoid Hydration Errors. Wrap inuseEffector use amountedflag.
2. URL-Driven State (Search/Filter)
Use useSearchParams + useRouter to update URL params. See URL State Pattern.
3. Server State (TanStack Query / SWR)
If you need "Live" data on the client (e.g., polling stock prices, chat), do not implement useEffect fetch manually. Use a library.
// Automated caching, deduplication, and revalidation with refreshInterval
const { data, error } = useSWR('/api/user', fetcher, {
refreshInterval: 30000,
});
Library Patterns
For specific state management patterns, see:
Anti-Patterns
- No global store for simple state: Use
useStateor URL params; avoid Zustand for basic UI. - No large objects in state: Decompose into granular primitives to prevent extra re-renders.
- No
useEffectfor data fetching: Use SWR or TanStack Query for server state. - No server state in client stores: Fetch in RSCs; client stores are for UI-only state.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.