Skip to content

pinia 配置学习

Pinia 起始于 2019 年 11 月左右的一次实验,其目的是设计一个拥有组合式 API 的 Vue 状态管理库。从那时起,我们就倾向于同时支持 Vue 2 和 Vue 3,并且不强制要求开发者使用组合式 API,我们的初心至今没有改变。除了安装和 SSR 两章之外,其余章节中提到的 API 均支持 Vue 2 和 Vue 3。虽然本文档主要是面向 Vue 3 的用户,但在必要时会标注出 Vue 2 的内容,因此 Vue 2 和 Vue 3 的用户都可以阅读本文档。

TIP

更多详情,请参见官网:官方文档

pinia 安装

bash
npm install pinia

main.ts 中引入并使用

ts
// 引入仓库
import pinia from './store'
// 安装仓库
app.use(pinia)

文件夹结构

bash
project root/
    |-- src/
        |-- store/
            |-- index.ts  // 仓库主文件
            |-- modules/  // 小仓库
                |-- user.ts  // 用户小仓库

index.ts 文件内容

ts
// 大仓库
import { createPinia } from 'pinia'

// 创建仓库
let pinia = createPinia()

// 对外暴露:入口文件main.ts 需要安装pinia
export default pinia

user.ts 文件内容

ts
// user.ts
// 创建用户相关的小仓库

import { defineStore } from 'pinia'
// 引入接口
import { reqLogin } from '@/api/user'
// 引入下数据类型
import type { loginForm } from '@/api/user/type'
// 创建用户小仓库
let useUserStore = defineStore('User', {
    // 小仓库存储数据的地方
    state: () => {
        return {
            // 用户唯一标识
            token: localStorage.getItem('TOKEN') || '',
        }
    },
    // 处理异步或逻辑的地方
    actions: {
        // 处理用户登录的方法
        async userLogin(data: loginForm) {
            // 登录请求
            const res: any = await reqLogin(data)
            // 登录成功:200 -> token
            if (res.code === 200) {
                // pinia 仓库存储token
                this.token = res.data.token
                // 本地持久化存储Token
                localStorage.setItem('TOKEN', res.data.token)
                // 成功后返回一个成功的promise
                return 'ok'
            } else {
                // 登录失败:201
                return Promise.reject(new Error(res.data.message))
            }
        },
    },
    getters: {},
})

// 对外暴露获取小仓库的方法
export default useUserStore