Agent Skillskqcoxn/MaaPipelineEditor › zustand-store-ts

zustand-store-ts

GitHub

提供基于TypeScript的Zustand状态管理最佳实践,包括subscribeWithSelector中间件、状态与动作分离及性能优化选择器模式,用于构建React全局状态。

.agents/skills/zustand-store-ts/SKILL.md kqcoxn/MaaPipelineEditor

Trigger Scenarios

创建Zustand store React状态管理 实现响应式状态模式

Install

npx skills add kqcoxn/MaaPipelineEditor --skill zustand-store-ts -g -y
More Options

Non-standard path

npx skills add https://github.com/kqcoxn/MaaPipelineEditor/tree/main/.agents/skills/zustand-store-ts -g -y

Use without installing

npx skills use kqcoxn/MaaPipelineEditor@zustand-store-ts

指定 Agent (Claude Code)

npx skills add kqcoxn/MaaPipelineEditor --skill zustand-store-ts -a claude-code -g -y

安装 repo 全部 skill

npx skills add kqcoxn/MaaPipelineEditor --all -g -y

预览 repo 内 skill

npx skills add kqcoxn/MaaPipelineEditor --list

SKILL.md

Frontmatter
{
    "name": "zustand-store-ts",
    "license": "MIT",
    "metadata": {
        "author": "Microsoft",
        "version": "1.0.0"
    },
    "description": "Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state\/action separation. Use when building React state management, creating global stores, or implementing reactive state patterns with Zustand."
}

Zustand Store

Create Zustand stores following established patterns with proper TypeScript types and middleware.

Website: https://zustand.nodejs.cn/docs/getting-started/introduction

Quick Start

Copy the template from assets/template.ts and replace placeholders:

  • {{StoreName}} → PascalCase store name (e.g., Project)
  • {{description}} → Brief description for JSDoc

Always Use subscribeWithSelector

import { create } from "zustand";
import { subscribeWithSelector } from "zustand/middleware";

export const useMyStore = create<MyStore>()(
  subscribeWithSelector((set, get) => ({
    // state and actions
  })),
);

Separate State and Actions

export interface MyState {
  items: Item[];
  isLoading: boolean;
}

export interface MyActions {
  addItem: (item: Item) => void;
  loadItems: () => Promise<void>;
}

export type MyStore = MyState & MyActions;

Use Individual Selectors

// Good - only re-renders when `items` changes
const items = useMyStore((state) => state.items);

// Avoid - re-renders on any state change
const { items, isLoading } = useMyStore();

Subscribe Outside React

useMyStore.subscribe(
  (state) => state.selectedId,
  (selectedId) => console.log("Selected:", selectedId),
);

Integration Steps

  1. Create store in src/frontend/src/store/
  2. Export from src/frontend/src/store/index.ts
  3. Add tests in src/frontend/src/store/*.test.ts

Version History

  • 9875bea Current 2026-07-24 22:31

Same Skill Collection

.agents/skills/ant-design-x/skills/use-x-chat/SKILL.md
.agents/skills/ant-design-x/skills/x-card/SKILL.md
.agents/skills/ant-design-x/skills/x-chat-provider/SKILL.md
.agents/skills/ant-design-x/skills/x-components/SKILL.md
.agents/skills/ant-design-x/skills/x-markdown/SKILL.md
.agents/skills/ant-design/SKILL.md
.agents/skills/maafw/SKILL.md
.agents/skills/react-flow-node-ts/SKILL.md
.agents/skills/tauri-v2/SKILL.md
.agents/skills/ant-design-x/skills/x-request/SKILL.md

Metadata

Files
0
Version
a481d63
Hash
cab1e170
Indexed
2026-07-24 22:31

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-20 09:01
浙ICP备14020137号-1 $Гость$