浅尝Vue最新状态管理工具Pinia(实战使用Pinia管理登录状态)

简介: pinia是vue新的状态管理工具,也称作vuex5,本文讲解Pinia的使用方法

什么是pinia

pinia其实就是Vuex5,这是尤雨溪老师在直播中提到的,所以它俩是一致的东西,只是vuex第五个版本之后就叫pinia了。Pinia官方文档传送门
官方文档首页是很可爱的小菠萝
在这里插入图片描述

pinia是同时支持vue2和vue3的,vuex4只支持vue3的 Composition API,所以这点来看pinia的支持性是非常好的

核心语法

pinia的核心语法有State,Getters,Actions,Plugins以及Stores outside of components(在组件外进行调用)。可以发现跟vuex4相比,pinia少了一个Mutation,在pinia中,是直接使用actions去做状态的修改。在actions中以前我们是通过state.去获得状态,而在这里可以直接通过this. 获取状态

起步

安装pinia

yarn add pinia
或者使用 npm
npm install pinia

可以在src下新建一个store文件夹 用来存放pinia相关的东西
index.ts

import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
  state: () => {
    return { count: 0 }
  },
  // could also be defined as
  // state: () => ({ count: 0 })
  actions: {
    increment() {
      this.count++
    },
  },
})

访问state

我们可以直接通过state.访问

const store = useStore()

store.counter++

使用Getters

要注意,在pinia中,Getters和state里面不能使用相同的名字

export const useStore = defineStore('main', {
  state: () => ({
    counter: 0,
  }),
  getters: {
    doubleCount: (state) => state.counter * 2,
  },
})

Actions

定义和处理业务逻辑

export const useStore = defineStore('main', {
  state: () => ({
    counter: 0,
  }),
  actions: {
    increment() {
      this.counter++
    },
    randomizeCounter() {
      this.counter = Math.round(100 * Math.random())
    },
  },
})

Pinia实战-登录状态的管理

新建store文件,在下面index.ts中编辑pinia的使用:

  1. 在state中定义了isAuthenticated表示登录状态,对象user中存放登录的用户信息,初始状态为空
  2. 在actions中进行定义,setAuth方法判断isAuth的值控制用户的登录状态,setUser方法将用户的信息写入user中
import { defineStore } from 'pinia'
import {userType} from '../utils/types'

export const useAuthStore = defineStore('auth', {
  state: () => {
    return { isAuthenticated:false,user: {} }
  },
  getters: {
    getAuthenticated: (state) => state.isAuthenticated,
    getUser: (state) => state.user,
  },
  actions: {
    setAuth(isAuth:boolean){
        if(isAuth){
            this.isAuthenticated = isAuth;
        }else {
            this.isAuthenticated = false;
        }
    },
    setUser(user: userType | null){
        if(user){
            this.user = user;
        }else {
            this.user = {}
        }
    }
  },
})

定义好了pinia,然后去登录界面使用
login.vue: 这里我就只展示使用pinia的部分了

首先要引入我们在pinia中定义的东西

import { useAuthStore } from "../store";
const store = useAuthStore();

解析token之后,信息保存在decode之中,然后直接通过store的setAuth和setUser方法传入对应的参数

 // 解析token
        const decode: userType = jwt_decode(token);

        store.setAuth(!!decode);
        store.setUser(decode);

效果实现

在没有登录的时候,也就是还没有token,我们查看控制台vue:
可以看到下图登录状态为false,用户信息user中也为空
在这里插入图片描述
然后我们点击登录,此时token已经保存,然后查看控制台
可以看到,用户的信息以及登录状态都获取到了
在这里插入图片描述
用户登录之后,我们将用户的信息保存到pinia中,这样在管理系统中可以很方便的调用用户信息进行其他的操作~

相关文章
|
1月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
145 4
|
3天前
|
人工智能 自然语言处理 JavaScript
通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
通义灵码基于自然语言需求,快速生成完整Vue组件。例如,用Vue 2和JavaScript实现贪吃蛇游戏:包含键盘控制、得分系统、游戏结束判定与Canvas动态渲染。AI生成的代码符合规范,支持响应式数据与事件监听,还能进阶优化(如增加启停按钮、速度随分数提升)。传统需1小时的工作量,使用通义灵码仅10分钟完成,大幅提升开发效率。操作简单:安装插件、输入需求、运行项目即可实现功能。
 通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
|
12天前
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
64 16
|
16天前
|
人工智能 自然语言处理 JavaScript
用 CodeBuddy 搭建Vue框架 像呼吸一样简单
本文介绍如何借助 CodeBuddy 快速创建 Vue 项目。CodeBuddy 是一款支持自然语言编程的工具,能根据用户需求自动生成代码,降低开发门槛。文章详细说明了通过 CodeBuddy 创建 Vue 项目的步骤,包括解决项目创建失败的问题、自动补全代码功能以及启动开发服务器的方法。无论开发者经验如何,CodeBuddy 都能显著提升效率,让开发更专注创意实现。
|
27天前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
2月前
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
147 56
|
2月前
|
SQL JavaScript 前端开发
Vue实现动态数据透视表(交叉表)
Vue实现动态数据透视表(交叉表)
198 13
|
2月前
|
数据采集 资源调度 JavaScript
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
本文介绍了使用 Vue Flow 绘制流程图的方法与技巧。Vue Flow 是一个灵活强大的工具,适合自定义复杂的流程图。文章从环境要求(Node.js v20+ 和 Vue 3.3+)、基础入门案例、自定义功能(节点与连线的定制、事件处理)到实际案例全面解析其用法。重点强调了 Vue Flow 的高度灵活性,虽然预定义内容较少,但提供了丰富的 API 支持深度定制。同时,文中还分享了关于句柄(handles)的使用方法,以及如何解决官网复杂案例无法运行的问题。最后通过对比 mermaid,总结 Vue Flow 更适合需要高度自定义和复杂需求的场景,并附带多个相关技术博客链接供进一步学习。
|
3月前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
2月前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~