Token导航 LogoToken导航TokenDH.com
研究检索操作浏览器github未标认证来源可访问许可证需确认审计通过

web-state-zustand网络状态 zustand

Agent Skill

web-state-zustand 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

282

周安装

12

GitHub Stars

5

下载量

99
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:web-state-zustand(网络状态 zustand)
来源仓库:https://github.com/agents-inc/skills
仓库路径:skills/web-state-zustand
安装命令:
npx skills add https://github.com/agents-inc/skills --skill web-state-zustand
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/agents-inc/skills --skill web-state-zustand

简介

用于查找、检索和筛选相关信息,支持基于关键词或任务场景快速定位内容。

  • 适用于在 Codex、Claude、Cursor、Gemini CLI 中需要从来源线索提取信息时使用。
  • 可结合来源仓库和原始文档进一步验证其实际功能和适用场景。
  • 安装命令:npx skills add https://github.com/agents-inc/skills --skill web-state-zustand。
  • 安装前建议确认权限范围、维护状态及是否涉及联网、命令执行或文件读写。

SKILL.md

Client State Management Patterns

Quick Guide: Local UI state? useState. Shared UI (2+ components)? Zustand. Server data? Use your data fetching solution. URL-appropriate filters? searchParams. NEVER use Context for state management. Zustand v5: use useShallow from zustand/react/shallow (not the old equality-fn second arg), selectors must return stable references, and persist no longer stores initial state during creation.

Detailed Resources:

  • examples/core.md - Store setup, selectors, useShallow, Context anti-patterns, URL state

<critical_requirements>

CRITICAL: Before Managing Client State

(You MUST use a data fetching solution for ALL server/API data - NEVER useState, Zustand, or Context)

(You MUST use Zustand for ALL shared UI state (2+ components) - NOT Context or prop drilling)

(You MUST use useState ONLY for truly component-local state - NOT for anything shared)

(You MUST use atomic selectors or useShallow from zustand/react/shallow - NEVER destructure the entire store)

(You MUST ensure selectors return stable references - inline object/function creation causes infinite loops in v5)

</critical_requirements>


Auto-detection: Zustand, zustand, create from zustand, useShallow, zustand/middleware, zustand store, client state, shared UI state, Context misuse, prop drilling, global state

When to use:

  • Deciding between Zustand or useState for a use case
  • Setting up Zustand for shared UI state (modals, sidebars, preferences)
  • Understanding when NOT to use Context for state management
  • Structuring stores: slices, actions, selectors

Key patterns covered:

  • Client state = useState (local) or Zustand (shared, 2+ components)
  • Context for dependency injection only (NEVER for state management)
  • Store setup with devtools and persist middleware
  • Selector patterns: atomic selectors vs useShallow
  • URL params for shareable/bookmarkable state (filters, search)

When NOT to use:

  • Server/API data (use a dedicated data fetching solution)
  • State that should be shareable via URL (use searchParams)
  • Any Context-based state management approach

Philosophy

Zustand is a minimal, hook-based state manager. The key principle: use the right tool for the right job. Server data belongs in a dedicated data fetching layer with caching and synchronization. Local UI state stays in useState. Shared UI state lives in Zustand for performance. URL state makes filters shareable. Context is ONLY for dependency injection, never state management.

Store design principles (from TkDodo and official docs):

  • Keep stores small - multiple focused stores beat one monolithic store
  • Business logic in the store - components call actions, stores decide what happens
  • Only export custom hooks - never expose the raw store creator
  • Atomic selectors preferred - return single values, not objects, for best performance

Core Patterns

Pattern 1: State Placement Decision

The most critical decision: where does this state belong?

Is it server data (from API)?
├─ YES → Data fetching solution (not this skill's scope)
└─ NO → Is it URL-appropriate (filters, search)?
    ├─ YES → URL params (searchParams)
    └─ NO → Is it needed in 2+ components?
        ├─ YES → Zustand
        └─ NO → Is it truly component-local?
            ├─ YES → useState
            └─ NO → Is it a singleton/dependency?
                └─ YES → Context (ONLY for DI, not state)

For full examples, see examples/core.md.


Pattern 2: Local State with useState

Use ONLY when state is truly component-local and never shared.

  • State used ONLY in one component (isExpanded, isOpen)
  • Temporary UI state that never needs to be shared
  • As soon as a second component needs it, move to Zustand

For good/bad comparisons, see examples/core.md.


Pattern 3: Zustand Store Setup

Use as soon as state is needed in 2+ components across the tree.

// stores/ui-store.ts
import { create } from "zustand";
import { devtools, persist } from "zustand/middleware";

const UI_STORAGE_KEY = "ui-storage";

interface UIState {
  sidebarOpen: boolean;
  theme: "light" | "dark";
  toggleSidebar: () => void;
  setTheme: (theme: "light" | "dark") => void;
}

export const useUIStore = create<UIState>()(
  devtools(
    persist(
      (set) => ({
        sidebarOpen: true,
        theme: "light",
        toggleSidebar: () => set((s) => ({ sidebarOpen: !s.sidebarOpen })),
        setTheme: (theme) => set({ theme }),
      }),
      { name: UI_STORAGE_KEY, partialize: (s) => ({ theme: s.theme }) },
    ),
  ),
);

Key points: devtools for debugging, persist only what survives sessions (preferences, not transient UI), partialize to exclude ephemeral state.

For selectors, useShallow, and v5 stability patterns, see examples/core.md.


Pattern 4: Context API - Dependency Injection ONLY

Context is NOT a state management solution. It's for dependency injection and singletons ONLY.

ONLY use Context for:

  • Framework providers (router, query client)
  • Dependency injection (services, API clients, DB connections)
  • Values set once at app initialization that never change

NEVER use Context for:

  • ANY state management (use Zustand instead)
  • ANY frequently updating values (every consumer re-renders on any change)

For why Context fails for state and acceptable DI usage, see examples/core.md.


Pattern 5: URL State for Shareable Filters

Use URL params (searchParams) for state that should be shareable, bookmarkable, or navigable.

  • Filter selections, search queries, pagination, sort order
  • Browser back/forward works correctly
  • URLs can be shared with specific filter state

For implementation examples, see examples/core.md.


<decision_framework>

Decision Framework

Quick Reference Table

Use CaseSolutionWhy
Server/API dataData fetching solutionCaching, synchronization, loading states
Shareable filtersURL paramsBookmarkable, browser navigation
Shared UI state (2+ components)ZustandFast, selective re-renders, no prop drilling
Local UI state (1 component)useStateSimple, component-local
Framework providers / DIContextSingletons that never change
ANY state managementNEVER ContextCauses full re-renders on any change

</decision_framework>


<red_flags>

RED FLAGS

High Priority Issues:

  • Storing server/API data in client state (useState, Context, Zustand) - causes stale data, no caching, manual sync complexity
  • Using Context with useState/useReducer for state management - every consumer re-renders on any change, performance nightmare
  • Destructuring the entire store const {x, y} = useStore() - subscribes to all changes, defeats selective re-rendering
  • Using useState for state needed in 2+ components - causes prop drilling, tight coupling, refactoring difficulty

Medium Priority Issues:

  • Prop drilling 3+ levels instead of using Zustand
  • Filter state in useState instead of URL params (not shareable/bookmarkable)
  • Creating unnecessary object references in Zustand selectors (causes re-renders)
  • One monolithic store instead of multiple focused stores

Gotchas & Edge Cases:

  • Context re-renders ALL consumers when ANY value changes - no way to select specific values
  • Zustand selectors that return new objects cause re-renders even if values are identical - use useShallow from zustand/react/shallow or atomic selectors
  • URL params are always strings - need parsing for numbers/booleans
  • Persisting modal/sidebar state across sessions confuses users - only persist preferences
  • Zustand v5: Selectors must return stable references - returning new functions/objects inline causes infinite loops
  • Zustand v5: The old shallow second argument to create() is removed - use useShallow hook wrapper or createWithEqualityFn from zustand/traditional
  • Zustand v5: The persist middleware no longer stores initial state during creation - set computed/random initial values explicitly with useStore.setState()
  • Zustand v5: Requires React 18+ and TypeScript 4.5+
  • Zustand v5: use-sync-external-store is a peer dependency only when using zustand/traditional

</red_flags>


<critical_reminders>

CRITICAL REMINDERS

(You MUST use a data fetching solution for ALL server/API data - NEVER useState, Zustand, or Context)

(You MUST use Zustand for ALL shared UI state (2+ components) - NOT Context or prop drilling)

(You MUST use useState ONLY for truly component-local state - NOT for anything shared)

(You MUST use atomic selectors or useShallow from zustand/react/shallow - NEVER destructure the entire store)

(You MUST ensure selectors return stable references - inline object/function creation causes infinite loops in v5)

Failure to follow these rules will cause stale data issues, performance problems, and infinite render loops.

</critical_reminders>

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

38.14%
按下载量换算38

Claude

30.12%
按下载量换算30

Cursor

17.34%
按下载量换算17

Gemini CLI

9.35%
按下载量换算9

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills