当前位置: 首页 > news >正文

Vue3状态管理Pinia

目录

1 Pinia简介

2 Pinia安装

3 Pinia使用

3.1 导入pinia和pinia-plugin-persistedstate并注册实例

3.2 定义状态数据存储仓库store

3.2.1 定义状态数据state

3.2.2 定义操作状态数据的函数

3.2.3 按需导出store

3.3 使用方法


1 Pinia简介

        Pinia是Vue的存储库,允许跨组件/页面共享状态,在Vue应用程序中管理状态数据,允许不同组件共享和使用这些数据。

        但是状态数据可能会随页面关闭或浏览器关闭而丢失,因此需要持久化到本地存储,pinia-plugin-persistedstate就可以将状态数据持久化。

2 Pinia安装

        安装pinia命令:

npm install pinia -S

        安装pinia-plugin-persistedstate命令:

npm install pinia-plugin-persistedstate -S

3 Pinia使用

        以登录的用户token和用户信息管理为例:

3.1 导入pinia和pinia-plugin-persistedstate并注册实例

// 导入pinia实例的函数
import { createPinia } from 'pinia'
// 导入pinia持久化实例的函数
import piniaPersistedState from 'pinia-plugin-persistedstate'
// 创建pinia实例
const pinia = createPinia()
pinia.use(piniaPersistedState)
// 导出pinia实例
export default pinia

3.2 定义状态数据存储仓库store

3.2.1 定义状态数据state

// 状态数据
const state = () => ({token: '',userInfo: {}
})

        state是定义的状态数据,包括两个状态:token和userInfo,这两个状态全局共享。

3.2.2 定义操作状态数据的函数

// actions定义操作状态数据的一系列函数
const actions = {// 设置pinia中的token,同时会持久化到本地local storagesetToken(token) {this.token = token},// 移除pinia中的Token,同时移除本地local storage的TokenremoveToken() {this.token = ''},// 设置pinia中的登录用户信息,同时会持久化到本地local storagesetUserInfo(userInfo) {this.userInfo = userInfo},// 移除pinia中的登录用户信息,同时移除本地local storage的登录用户信息removeUserInfo() {this.userInfo = {}},// 登录 actionloginAction({ phone, password }) {return new Promise((resolve, reject) => {// 调用登录接口loginApi({ phone, password }).then((res) => {this.setToken(res.accessToken)resolve()// 注意:因为使用了pinia状态持久化插件,因此当数据存储在pinia中的时候,也会在本地存储一份该数据// pinia中的数据是保存在内存中(临时存储),页面刷新后数据就丢失了;只有把数据存储在本地,这样的话,数据刷新才不丢失。// 今后操作数据的原则(原则依据:pinia持久化插件帮我们实现了):// 1. 无论是获取数据还是修改数据,一律操作的都是 pinia 中的数据;因为当 pinia 中的数据发生变化了,本地存储中的数据会同步发生变化// 2. 当页面刷新的时候,插件会自动将本地存储中的数据给 pinia 中的数据赋值,从而保证了 pinia 中的数据刷新不丢失}).catch((error) => {reject(error)})})},// 获取用户信息 actiongetUserInfoAction() {return new Promise((resolve, reject) => {// 发请求getUserInfoApi().then((userInfo) => {this.setUserInfo(userInfo)resolve()}).catch((error) => {reject(error)})})},// 退出 actionlogoutAction() {this.removeToken()this.removeUserInfo()}
}

        actions是一系列的操作state的方法,通过this可获取当前store实例对象。

3.2.3 按需导出store

// 按需导出状态数据仓库user
export const useUserStore = defineStore('user', {state,actions,persist: true // 持久化
})

        这里导出了一个名为user的Pinia仓库store,包含状态数据state、操作函数actions,persist属性为true表示持久化。

        注意: pinia中的数据是保存在内存中(临时存储),页面刷新数据就丢失后了。只有把数据存储在本地,这样的话,数据刷新才不丢失。

        persist即是因为使用了pinia状态持久化插件,因此当数据存储在pinia中的时候,也会在本地存储一份该数据。在该插件作用下,操作数据的原则如下:
          1. 无论是获取数据还是修改数据,一律操作的都是 pinia 中的数据;因为当 pinia 中的数据发生变化了,本地存储中的数据会同步发生变化
          2. 当页面刷新的时候,插件会自动将本地存储中的数据给 pinia 中的数据赋值,从而保证了 pinia 中的数据刷新不丢失。

3.3 使用方法

        在需要用到Pinia中的状态数据的组件导入Pinia实例,直接使用实例的操作数据的函数即可:

  import { useUserStore } from '@/stores'const userStore = useUserStore()
http://www.dtcms.com/a/454238.html

相关文章:

  • 中山市交通建设发展集团网站网站的内链
  • 建设银行官方网站面试详细信息网站中文商标域名注册
  • Ant Design项目实践CRM系统MVP
  • 房源开发网站wordpress页面结构
  • 做网站图片代码怎么居中免费网站自助建站系统
  • Python简介与入门-CSDN博客
  • 网站seo诊断书app开发公司查询
  • 贵阳企业网站制作长沙出名的网站设计推广
  • 新网站建设一般多少钱空中花园做网站的公司
  • Effective STL 第3条:确保容器中的对象拷贝正确而高效
  • EC2挂载到EFS
  • 网站建设什么代码最简单网站建设教程 mysql
  • 一条龙建站建设网站对于电商的作用是?
  • 广州建设行业网站搭建一个wordpress
  • 广西两学一做网站上海定制网站建设公司
  • 安装多个wordpress站点上海电子通科技网站建设
  • html5网站多少钱建com网站
  • 荆州网站建设多少钱wordpress软件下载
  • 湛江网站制作工具网站 php连接mysql 代码
  • 深圳网站建设制作开发网站开发四个重点
  • 国外做任务的网站企业微网站与手机微信号
  • Mysql初阶第一讲:数据库基础
  • ESP32从环境配置到创建一个LED工程【上】
  • 广州市公司网站建设企业中国建设银行陕西省分行网站
  • 做婚纱摄影网站价格win10运行wordpress
  • 数字信号 · 时域变换 | 时移、伸缩与反转及 MATLAB 实现
  • 【JAVA】ArrayList与顺序表
  • 算法题(228):treats for the cows
  • 怎么建立企业网站注册公司名字大全免费
  • 中国最大房产网站排名用凡科做的手机网站版