首页 > 其他分享 >Pinia及其优化:Vue状态管理的解决方案

Pinia及其优化:Vue状态管理的解决方案

时间:2024-03-29 11:33:07浏览次数:30  
标签:Vue const Pinia useTokenStore 解决方案 tokenStore token pinia import

pinia及其优化目录

1. pinia状态管理库

2. pinia的使用步骤

2.1 安装

2.2 使用pinia

2.3 定义store

2.4 使用store

3. axios请求拦截器(优化pinia)

3.1 问题缘由

3.2 优化方法

4. Pinia持久化插件-persist

4.1 安装

4.2 使用


1. pinia状态管理库

Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态,提升了Vue应用的可维护性和扩展性。

2. pinia的使用步骤

2.1 安装

通过 npm install pinia 安装Pinia库。

2.2 使用pinia

在 main.js 文件中,使用以下代码引入并使用Pinia:

import { createPinia } from 'pinia'
const pinia = createPinia()
app.use(pinia)

2.3 定义store

在 src/stores/token.js 中定义store,例如:

import { defineStore } from 'pinia'
import { ref } from 'vue'
/* 
    第一个参数:名字,唯一性
    第二个参数:函数,函数的内容可以定义状态的所有内容

    返回值:函数
*/

export const useTokenStore = defineStore('token', () => {
    //定义状态的内容

    //1. 响应式变量
    const token = ref('')

    //2. 定义一个函数,修改token的值
    const setToken = (newToken) => {
        token.value = newToken;
    }

    //3. 函数,移除token的值
    const removeToken = () => {
        token.value = '';
    }

    return {
        token, setToken, removeToken
    }
})

2.4 使用store

在组件中导入store,并使用它的状态和方法:

//导入token状态
import { useTokenStore } from '@/stores/token.js'
//调用useTokenStore得到状态
const tokenStore = useTokenStore();
//tokenStore.token
//tokenStore.setToken()
//tokenStore.removeToken()

3. axios请求拦截器(优化pinia)

3.1 问题缘由

 每次都需要添加{ headers: { 'Authorization': tokenStore.token } },太繁琐

import request from '@/utils/request.js'
import { useTokenStore } from '@/stores/token.js'

//文章分类列表查询
export const articleCategoryListService = () => {
    const tokenStore = useTokenStore();
    //在pinia中定义的响应式数据,都不需要.value
    return request.get('/category', { headers: { 'Authorization': tokenStore.token } })
}

3.2 优化方法

在request.js中设置请求拦截器,统一处理添加token的逻辑:

import { useTokenStore } from '@/stores/token.js'
//添加请求拦截器
instance.interceptors.request.use(
    (config) => {
        //请求前的回调
        //添加token
        const tokenStore = useTokenStore();
        //判断有没有token
        if (tokenStore.token) {
            config.headers.Authorization = tokenStore.token;
        }
        return config;
    },
    (err) => {
        //请求错误的回调
        Promise.reject(err);
    }
)

优化后的代码

import request from '@/utils/request.js'
import { useTokenStore } from '@/stores/token.js'

//文章分类列表查询
export const articleCategoryListService = () => {
    //const tokenStore = useTokenStore();
    //在pinia中定义的响应式数据,都不需要.value
    //return request.get('/category', { headers: { 'Authorization': tokenStore.token } })
    return request.get('/category')
}

4. Pinia持久化插件-persist

  • Pinia默认是内存存储,当刷新浏览器的时候会丢失数据。
  • Persist插件可以将pinia中的数据持久化的存储

4.1 安装

安装persist:npm install pinia-persistedstate-plugin

4.2 使用

在pinia中使用persist(配置main.js)

import {createPersistedState} from'pinia-persistedstate-plugin' 
const persist = createPersistedState()
pinia.use(persist)

定义状态Store时指定持久化配置参数

export const useTokenStore = defineStore('token', () => {
    //定义状态的内容...
}, {
    persist: true//持久化存储
})

笔记参考

标签:Vue,const,Pinia,useTokenStore,解决方案,tokenStore,token,pinia,import
From: https://blog.csdn.net/lph159/article/details/136933569

相关文章

  • 开源 | 电动自行车充换电解决方案,从智能硬件到软件系统,全部自主研发
    文章目录一、产品功能部分截图1.手机端(小程序、安卓、ios)2.PC端二、小程序体验账号以及PC后台体验账号1.小程序体验账号2.PC后台体验账号关注公众号获取最新资讯三、产品简介?1.充电桩云平台(含硬件充电桩)(v2.5.2),支持(采集端-用户端-商户端-平台端)全业务场景,免费提供平台......
  • Vue:实现子组件和父组件数据的双向绑定案例和sync修饰符简化
    实现子组件和父组件数据的双向绑定(实现App.vue中的selectId和子组件选中的数据进行双向绑定)代码案例BaseSelect.vue<template><div><select:value="selectId"@change="selectCity"><optionvalue="101">北京</option><op......
  • MybatisPlus多参数分页查询,黑马程序员SpringBoot3+Vue3教程第22集使用MP代替pagehelpe
    前言:视频来源1:黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关视频来源2:黑马程序员最新MybatisPlus全套视频教程,4小时快速精通mybatis-plus框架创作理由:网上MP实现分页查询功能的帖子易读性太差,具体实现看下面。根据视频完成......
  • Vue+.Net6部署日记
    一.准备工作vue编译后以dist文件夹在iis新建一个网站,.Net6发布后同样的建站但是要注意把应用程序池设置为无托管模式二.配置反向代理IIS给前端方向代理需要以下两个组件:1.ARR2.Url重写;这两个组件都可以在www.iis.net搜到,在搜索栏输入关键词然后一个个找就好,先确保下......
  • 在vue中 使用v-if时它的响应式系统会作哪些优化
    前言:有时我们没在一个组件做初始化数据的工作,只是在template下的根元素加了个v-if控制显示,这样一来也能达到初始化数据的目的。但其背后的原理是什么? 在Vue2.x中,当你使用v-if指令将一个组件或元素的条件设置为false,使得它在DOM中不可见时,Vue的响应式系统会进行一些......
  • TSINGSEE青犀推出县域治理视频基座数字化、智慧化解决方案
    一、方案背景县域治理方案是我国地方治理体系的重要组成部分,对于促进县域经济社会发展、维护社会稳定、推进全面深化改革具有重要意义。随着科技的不断进步,视频监管已经成为了现代社会治理的重要手段之一。县域治理视频监管方案是通过视频监控、数据分析等技术手段,对县域内的各个......
  • vue3项目数字金额转大写
    consttoUpperCaseAmount=(value)=>{ //将数字金额转换为大写的逻辑 constdigitUppercase=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; constunit=[......
  • 免费分享一套SpringBoot+Vue个人健康管理系统,帅呆了~~
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue个人健康管理系统,分享下哈。项目视频演示【免费】SpringBoot+Vue个人健康管理系统Java毕业设计_哔哩哔哩_bilibili【免费】SpringBoot+Vue个人健康管理系统Java毕业设计项目来自互联网,免费开源分享,严禁商业。更多......
  • .NET C#导出解决方案的NuGet依赖关系
    前言公司项目需要写DS设计文档,文档需要标识出来你的解决方案文件下的所有项目都使用了NuGet哪些第三方依赖,我们都知道sln下面的所有.csproj文件中的节点下会标识出对应的依赖,但一个一个对比又太麻烦(主要是懒),有时候一个sln能有10几个project项目,能不能写脚本一键导出这些依赖关......
  • Ant Design Vue Tree 选中子节点同时半选中父级节点
    需要实现的效果:1、子菜单如果不是全部选中,一级菜单半选。2、子菜单全选,一级菜单选中。3、一级菜单选择,二级菜单全选。4、没有二级菜单,则只控制一级菜单。主要用到的属性是checked和halfCheckedKeys,通过手动控制那些菜单选中,那些半选中实现功能。**页面截图:**完整代码如......