zustand-store-ts — скилл для Claude Code: стор на Zustand с типами
Скилл задаёт шаблон стора Zustand на TypeScript: отдельные типы для состояния и действий, middleware subscribeWithSelector, селекторы.
npx skills add microsoft/skills --skill zustand-store-ts -a claude-codeЧто делает zustand-store-ts
Скилл описывает, как писать глобальные сторы на Zustand в React-проекте. Внутри — готовый шаблон assets/template.ts, где вместо плейсхолдеров {{StoreName}} и {{description}} подставляются имя стора в PascalCase и короткое описание для JSDoc.
Правила жёсткие: обёртка subscribeWithSelector из zustand/middleware используется всегда, состояние и действия описываются отдельными интерфейсами и объединяются в тип стора. В компонентах берутся индивидуальные селекторы — так ререндер случается только при изменении нужного поля, а не на любом обновлении стора. Подписка вне React идёт через useMyStore.subscribe с селектором и колбэком.
Дальше четыре шага: создать стор в src/frontend/src/store/, экспортировать из src/frontend/src/store/index.ts, добавить тесты в src/frontend/src/store/*.test.ts. Пути заданы конкретные, так что в проекте с другой структурой папок их придётся поправить — это первое, на что стоит посмотреть перед установкой.
Какие задачи решает
- завести глобальный стор на Zustand без разнобоя в типах
- разделить состояние и действия в отдельные интерфейсы
- подписаться на изменение поля вне React-компонента
- убрать лишние ререндеры через индивидуальные селекторы
- разложить файлы стора и тесты по принятой структуре
Примеры запросов агенту
- создай стор Project по шаблону скилла zustand-store-ts
- добавь в стор действие loadItems и подписку на selectedId
- вынеси состояние и действия стора в отдельные интерфейсы
Как установить zustand-store-ts
1Через Skills CLI (Vercel)
npx skills add microsoft/skills --skill zustand-store-ts -a claude-code2Вручную: положить файлы
~/.claude/skills/zustand-store-ts/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/zustand-store-ts/
Вручную: положить файлы
.agents/skills/zustand-store-ts/SKILL.mdДля всех проектов — ~/.agents/skills/
Вручную: положить файлы
.cursor/skills/zustand-store-ts/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install microsoft/skills zustand-store-ts2Вручную: положить файлы
.github/skills/zustand-store-ts/SKILL.mdКомандой платформы
gemini skills install https://github.com/microsoft/skills --path .github/plugins/azure-sdk-typescript/skills/zustand-store-tsВручную: положить файлы
.devin/skills/zustand-store-ts/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора64
Весь набор →Похожие
Рядом в теме «Фронтенд и UI»
Всё по теме «Фронтенд и UI» →Вопросы о zustand-store-ts
Как установить zustand-store-ts в Claude?
Выполните npx skills add microsoft/skills --skill zustand-store-ts -a claude-code. После этого файл скилла лежит в ~/.claude/skills/zustand-store-ts/SKILL.md.
Что делает zustand-store-ts?
Даёт шаблон и правила для сторов Zustand на TypeScript: middleware subscribeWithSelector, разделение состояния и действий, индивидуальные селекторы и подписки вне React.
Где скилл размещает файлы стора?
По шагам из скилла стор создаётся в src/frontend/src/store/, экспортируется из src/frontend/src/store/index.ts, а тесты кладутся в src/frontend/src/store/*.test.ts.
Исходный текст
SKILL.md · MIT
---
name: zustand-store-ts
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.
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---
# Zustand Store
Create Zustand stores following established patterns with proper TypeScript types and middleware.
## Quick Start
Copy the template from [assets/template.ts](assets/template.ts) and replace placeholders:
- `{{StoreName}}` → PascalCase store name (e.g., `Project`)
- `{{description}}` → Brief description for JSDoc
## Always Use subscribeWithSelector
```typescript
import { create } from 'zustand';
import { subscribeWithSelector } from 'zustand/middleware';
export const useMyStore = create<MyStore>()(
subscribeWithSelector((set, get) => ({
// state and actions
}))
);
```
## Separate State and Actions
```typescript
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
```typescript
// 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
```typescript
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`
© Microsoft · MIT · microsoft/skills