Vue3入门 - Pinia使用(替代Vuex)

        pinia是Vue的存储库,它允许您跨组件/页面共享状态。它Vuex的替代品,其功能和性能更优于vuex,在后期使用中会逐渐被大家发现。

        这里我们先使用pinia全局存储用户信息、接口访问令牌、菜单列表等数据,当然这些只是作为一个项目的基础部分,其他共享信息可根据你们的项目需求进行添加。

一、安装

        在创建项目时,一般会有选项可以选择是否安装Pinia,选择是即可。如果创建项目里错过了也没关系,通过命令安装即可。代码如下:

// npm安装
npm i pinia
// yarn安装
yarn add pinia
// pnpm 安装
pnpm add pinia

二、Pinia使用

2.1 定义数据类型

        在Vue3+ts开中,对变量的定义和书写规则,则需要按ts语法进行编写,否则编辑器则会显示波浪线并提示您。

        在项目的src/types目录下创建global.ts,用于存储类型数据。代码如下:

// 用户数据 接口
export interface UserInfo {
  id?: number   // id
  username: string  // 用户名
  avatar?: string   // 头像
}
export type UserInfoType = UserInfo

// 菜单信息 接口
export interface MenuListInfo {
  id: number
  name: string,
  icon?: string,
  children: Array<MenuListInfo>
}
export type MenuListInfoType = MenuListInfo

2.2 创建global.ts

       用户信息、访问令牌、菜单令牌在项目中使用频率较高,这里将这些信息放在global.js全局文件中。在src/stores目录中创建global.js,代码如下:

import { ref, computed, reactive } from 'vue'
import { defineStore } from 'pinia'
import type { UserInfoType, MenuListInfoType } from '@/types/global'

// 用户信息
export const useUserInfoStore = defineStore('userInfo', () => {
  // 定义用户信息状态(添加默认数据)
  let userInfo = reactive<UserInfoType>({username: '匿名'})
  // 定义getters获取用户信息响应数据
  const user_info = computed(() => userInfo)
  // 定义actions添加或修改用户信息函数
  const userInfoChange = (_value: UserInfoType) => userInfo = _value
  return { user_info, userInfoChange }
})

// 访问令牌
export const useAccessTokenStore = defineStore('accessToken', () => {
  // 定义访问令牌状态
  const accessToken = ref<string>('')
  // 定义getters获取访问令牌响应式数据
  const access_token = computed(() => accessToken)
  // 定义actions添加或修改访问令牌
  const accessTokenChange = (_value: string) => accessToken.value = _value
  return { access_token, accessTokenChange }
})

// 菜单列表令牌
export const useMenuListStore = defineStore('menuList', () => {
  // 定义菜单列表状态
  let menuList = reactive<Array<MenuListInfoType>>([])
  // 定义getters获取菜单数据
  const menu_list = computed(() => menuList)
  // 定义actions添加或修改菜单信息
  const menuListChange = (_value: Array<MenuListInfoType>) => menuList = _value
  return { menu_list, menuListChange }
})

2.3 创建login.ts

        当登录成功后,一般接口会同时返回用户信息和访问令牌,如果我们不希望引入useUserInfoStore后又引入useAccessTokenStore,使用一个use

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觉醒法师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值