基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-vue --skill vue-pinia命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Master Vue Composition API - Composables, Reactivity Utilities, Script Setup, Provide/Inject
Master Vue.js core concepts - Components, Reactivity, Templates, Directives, Lifecycle
Master Nuxt.js - SSR, SSG, Nitro Server, Modules, Auto-imports, Deployment
| name | vue-pinia |
| description | Master Pinia State Management - Stores, Actions, Getters, Plugins, Persistence |
| sasmp_version | 1.3.0 |
| bonded_agent | 03-vue-pinia |
| bond_type | PRIMARY_BOND |
| version | 2.0.0 |
| last_updated | 2025-01 |
Production-grade skill for mastering Pinia state management in Vue applications.
Single Responsibility: Teach scalable state management patterns with Pinia including store design, actions, getters, plugins, and persistence strategies.
interface PiniaParams {
topic: 'stores' | 'actions' | 'getters' | 'plugins' | 'persistence' | 'all';
level: 'beginner' | 'intermediate' | 'advanced';
context?: {
app_size?: 'small' | 'medium' | 'large';
existing_state?: string[];
};
}
Prerequisites: vue-composition-api
Duration: 2-3 hours
Outcome: Create and use Pinia stores
| Topic | Concept | Exercise |
|---|---|---|
| Setup | Install and configure | App setup |
| defineStore | Create stores | Counter store |
| State | Reactive state | User store |
| Using stores | storeToRefs | Component access |
Store Syntax Comparison:
// Options Store
defineStore('counter', {
state: () => ({ count: 0 }),
getters: { double: (s) => s.count * 2 },
actions: { increment() { this.count++ } }
})
// Setup Store (Recommended)
defineStore('counter', () => {
const count = ref(0)
const double = computed(() => count.value * 2)
function increment() { count.value++ }
return { count, double, increment }
})
Prerequisites: Module 1
Duration: 2-3 hours
Outcome: Handle async operations
| Pattern | Use Case | Exercise |
|---|---|---|
| Sync actions | Simple mutations | Cart updates |
| Async actions | API calls | Fetch users |
| Error handling | Try/catch | Error states |
| Loading states | UX feedback | Spinners |
| Optimistic updates | Fast UX | Instant feedback |
Prerequisites: Module 2
Duration: 1-2 hours
Outcome: Derive and filter state
| Pattern | Use Case | Exercise |
|---|---|---|
| Simple getter | Derived value | Full name |
| Parameterized | Filtered access | Find by ID |
| Cross-store | Compose stores | Cart with products |
| Memoization | Performance | Expensive calcs |
Prerequisites: Modules 1-3
Duration: 3-4 hours
Outcome: Design scalable store structure
Architecture Patterns:
stores/
├── modules/
│ ├── useUserStore.ts # User domain
│ ├── useProductStore.ts # Product domain
│ └── useCartStore.ts # Cart domain
├── shared/
│ └── useNotificationStore.ts
└── index.ts # Re-exports
| Pattern | Description | When to Use |
|---|---|---|
| Domain stores | One per feature | Large apps |
| Composed stores | Store uses store | Related data |
| Normalized state | ID-based lookup | Many entities |
| Module pattern | Organized exports | Team projects |
Prerequisites: Modules 1-4
Duration: 2-3 hours
Outcome: Extend Pinia functionality
| Plugin | Function | Exercise |
|---|---|---|
| Logger | Dev debugging | Action logging |
| Persisted State | LocalStorage | Auth persistence |
| Reset | State reset | Logout cleanup |
| Custom | Domain-specific | Analytics |
const skillConfig = {
maxAttempts: 3,
backoffMs: [1000, 2000, 4000],
onFailure: 'simplify_store_design'
}
tracking:
- event: store_created
data: [store_name, store_type]
- event: pattern_applied
data: [pattern_name, success]
- event: skill_completed
data: [stores_built, complexity]
| Issue | Cause | Solution |
|---|---|---|
| Store not reactive | Destructured state | Use storeToRefs() |
| Circular dependency | A→B→A imports | Lazy import or reorganize |
| No active Pinia | Used before app.use | Check setup order |
| HMR not working | Missing acceptHMRUpdate | Add HMR config |
import { describe, it, expect, beforeEach } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
import { useUserStore } from './useUserStore'
describe('useUserStore', () => {
beforeEach(() => {
setActivePinia(createPinia())
})
it('initializes with null user', () => {
const store = useUserStore()
expect(store.user).toBeNull()
})
it('logs in user correctly', async () => {
const store = useUserStore()
await store.login({ email: 'test@example.com' })
expect(store.isLoggedIn).toBe(true)
})
it('logs out and clears state', () => {
const store = useUserStore()
store.$patch({ user: { id: '1', name: 'Test' } })
store.logout()
expect(store.).()
})
})
Skill("vue-pinia")
vue-composition-api - Prerequisitevue-typescript - Typed storesvue-testing - Store testing