with one click
pinia
基于 Pinia 的全局状态管理规范,包含 UserStore、AppStore 的标准定义
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
基于 Pinia 的全局状态管理规范,包含 UserStore、AppStore 的标准定义
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.
Archive multiple completed changes at once. Use when archiving several parallel changes.
Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue their workflow.
Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the user wants to think through something before or during a change.
Fast-forward through OpenSpec artifact creation. Use when the user wants to quickly create all artifacts needed for implementation without stepping through each one individually.
| id | eng-state-management |
| name | 全局状态管理规范 (Pinia) |
| category | engineering |
| description | 基于 Pinia 的全局状态管理规范,包含 UserStore、AppStore 的标准定义 |
| tags | ["pinia","store","state","vue3"] |
| updated_at | "2026-01-09T00:00:00.000Z" |
推荐使用 Setup Store 语法(类似 Composition API),比 Options API 更灵活。
// src/store/user.ts
import { defineStore } from 'pinia';
import { ref } from 'vue';
export const useUserStore = defineStore('user', () => {
const userInfo = ref(null);
const loading = ref(false);
const fetchUserInfo = async () => {
if (userInfo.value) return userInfo.value;
loading.value = true;
try {
userInfo.value = await http.get('/user/info');
} finally {
loading.value = false;
}
};
return { userInfo, loading, fetchUserInfo };
});
<script setup lang="ts">
import { useUserStore } from '@/store/user';
import { storeToRefs } from 'pinia';
const userStore = useUserStore();
// 使用 storeToRefs 保持响应性
const { userInfo, loading } = storeToRefs(userStore);
// Action 直接调用
userStore.fetchUserInfo();
</script>
| 错误 | 解决 |
|---|---|
| 解构丢失响应性 | 用 storeToRefs() |
| 多次实例化 | Store 单例,直接 useXxxStore() |
| 资源 | URI |
|---|---|
| 完整 Store 模板 | skill://pinia-setup/assets/store-template.ts |
skill://pinia-setup/assets/store-template.ts根据 SKILL.md 中的 IF-THEN 规则判断是否需要加载