create-store
指导在前端项目中按团队规范使用 Zustand 创建和维护全局状态 store,包括目录结构、命名与持久化策略。当前端需要新增或重构状态管理时使用本技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
指导在前端项目中按团队规范使用 Zustand 创建和维护全局状态 store,包括目录结构、命名与持久化策略。当前端需要新增或重构状态管理时使用本技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
检查 .agents 下 rules、skills、README 与模板基线依赖的一致性,避免规则漂移、悬空引用和 React 能力越界。修改或新增 .agents 内容时使用本技能。
指导在前端项目中按团队规范创建和维护接口请求层,涵盖统一请求客户端、业务 API 文件、类型组织、错误处理、mock 过渡与 React 使用边界。当前端需要新增或重构接口时使用本技能。
指导在前端项目中按团队规范创建和维护 React 组件,涵盖通用组件与页面级组件的边界、目录结构、样式隔离、类型设计与导出策略。当前端需要新增、拆分或沉淀组件时使用本技能。
指导在前端项目中按团队规范创建和维护路由(React Router Data Router),涵盖路由单源、页面目录、路由模块注册、懒加载、标题与守卫等约束。当前端需要新增或重构页面路由时使用本技能。
指导在前端项目中正确使用 Ant Design 与自定义主题 CSS 变量,避免硬编码颜色并保证暗色/浅色主题切换一致性。当前端编写或修改样式时使用本技能。
React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.
| name | create-store |
| description | 指导在前端项目中按团队规范使用 Zustand 创建和维护全局状态 store,包括目录结构、命名与持久化策略。当前端需要新增或重构状态管理时使用本技能。 |
src/stores/index.ts + src/stores/modules/useXxxStore.tsimmer;持久化仅在确有需要时启用当你需要:
src/stores 目录请使用本技能,并同时遵守 .agents/rules/03-项目结构.md(目录结构约束)与 .agents/rules/07-状态管理.md。
useState / useReducersrc/stores/modules/src/stores/modules/useXxxStore.tsuseXxxStore(Xxx 与业务语义一致)src/stores/index.ts(集中导出各模块 useXxxStore)示例:
// 结构示意
// src/stores/index.ts
// src/stores/modules/useThemeStore.ts -> useThemeStore
// src/stores/modules/useUserStore.ts -> useUserStore
// src/stores/modules/useAppStore.ts -> useAppStore
// src/stores/index.ts(统一导出示例)
export { useThemeStore } from './modules/useThemeStore';
export { useUserStore } from './modules/useUserStore';
export { useAppStore } from './modules/useAppStore';
// src/stores/modules/useThemeStore.ts
import { create } from 'zustand';
import { immer } from 'zustand/middleware/immer';
import { ThemeMode } from '@/constants/theme';
type State = {
themeMode: ThemeMode;
};
type Action = {
setThemeMode: (themeMode: ThemeMode) => void;
toggleThemeMode: () => void;
};
type Store = State & Action;
export const useThemeStore = create<Store>()(
immer((set, get) => ({
themeMode: ThemeMode.LIGHT,
setThemeMode: (themeMode) =>
set((state) => {
state.themeMode = themeMode;
}),
toggleThemeMode: () =>
set((state) => {
state.themeMode =
get().themeMode === ThemeMode.LIGHT ? ThemeMode.DARK : ThemeMode.LIGHT;
}),
}))
);
当状态需要跨页面或刷新保留时,使用 zustand/middleware 的 persist:
// src/stores/modules/useThemeStore.ts(持久化示例)
import { create } from 'zustand';
import { createJSONStorage, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { ThemeMode } from '@/constants/theme';
type State = {
themeMode: ThemeMode;
};
type Action = {
setThemeMode: (themeMode: ThemeMode) => void;
};
type Store = State & Action;
export const useThemeStore = create<Store>()(
persist(
immer((set) => ({
themeMode: ThemeMode.LIGHT,
setThemeMode: (themeMode) =>
set((state) => {
state.themeMode = themeMode;
}),
})),
{
name: 'app-theme-store',
storage: createJSONStorage(() => localStorage),
partialize: (state) => ({ themeMode: state.themeMode }),
}
)
);
src/stores,禁止 在组件层直接用 useState 维护本应全局共享的业务状态。useState / useReducer,不要把局部状态提前抽到全局。// 推荐:使用选择器订阅,避免一次性订阅整个 store 导致不必要重渲染
const themeMode = useThemeStore((s) => s.themeMode);
const setThemeMode = useThemeStore((s) => s.setThemeMode);
// 若确需同时取多个字段,可组合选择器(注意引用稳定性与渲染影响)
const toggleThemeMode = useThemeStore((s) => s.toggleThemeMode);
来消费状态。
src/stores/modules/?useXxxStore.ts,且是否导出 useXxxStore?src/stores/index.ts 统一导出了对应 useXxxStore?immer 中间件,并用 set((state) => { ... }) 更新 state?useXxxStore 作为导出的 hook 名称?persist?persist:是否组合了 createJSONStorage(() => localStorage)?persist:是否通过 partialize 只持久化必要字段?persist:name 是否使用 app-xxx-store 形式?useXxxStore((s) => s.xxx) / useXxxStore((s) => s.setXxx)?persist