# Pinia 状态管理使用说明 ## 目录结构 ``` store/ ├── index.js # Pinia 实例 ├── README.md # 使用说明 └── modules/ # 状态模块 ├── user.js # 用户状态 └── ... # 其他模块 ``` ## 使用方式 ### 1. 在组件中使用 ```vue ``` ### 2. 在 JS 文件中使用 ```javascript import { useUserStore } from '@/store/modules/user.js' import { createPinia } from 'pinia' // 注意:在非组件中使用时,需要确保 pinia 已初始化 const userStore = useUserStore() ``` ## 内置模块 ### user.js - 用户状态 **状态:** - `token` - 登录令牌 - `userInfo` - 用户信息对象 **计算属性:** - `isLoggedIn` - 是否已登录 - `userName` - 用户名 - `userAvatar` - 用户头像 **方法:** - `setToken(token)` - 设置 token - `setUserInfo(info)` - 设置用户信息 - `loginSuccess(data)` - 登录成功处理 - `logout()` - 退出登录 - `updateUserInfo(info)` - 更新用户信息 ## 创建新模块 在 `store/modules/` 目录下创建新文件: ```javascript // store/modules/todo.js import { defineStore } from 'pinia' import { ref } from 'vue' export const useTodoStore = defineStore('todo', () => { // 状态 const list = ref([]) // 方法 const addTodo = (item) => { list.value.push(item) } return { list, addTodo } }) ``` ## 注意事项 1. **数据持久化**:当前使用 `uni.setStorageSync` 手动持久化重要数据 2. **小程序兼容性**:Pinia 已兼容微信小程序 3. **响应式**:所有状态都是响应式的,组件会自动更新 ## 迁移指南 从 `utils/userCache.js` 迁移到 Pinia: **之前:** ```javascript import { getUserInfo, isLogin } from '@/utils/userCache.js' const info = getUserInfo() ``` **现在:** ```javascript import { useUserStore } from '@/store/modules/user.js' const userStore = useUserStore() const info = userStore.userInfo ```