快速搞懂Pinia及数据持久化存储(详细教程)

Pinia使用方法及持久化存储 Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态。它跟Vuex有一定的相似度,但还是有很大的区别。愿意看这篇博客的人,想必已经看过了官方文档,官方文档很详细,包含各种使用情景和理论,因此本文不说理论,只说具体的使用方法,想深入研究的建议去看官方文档,本文适合拿来即用。Pinia 官方文档。 阅读详情
AI摘要

本文介绍Pinia状态管理库的安装、配置与使用方法,包括数据定义、组件中使用Store、数据持久化等核心功能,并对比Pinia与Vuex的区别。

一.安装及使用Pinia

1.安装Pinia两种方式都可,根据个人习惯来

npm install pinia
yarn add pinia

2.在main.ts 中引入并挂载到根实例

// src/main.ts
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
// 创建Vue应用实例
// 实例化 Pinia
// 以插件形式挂载Pinia实例
createApp(App).use(createPinia()).mount('#app')

3.src目录下新建store/study/index.js并写入

Store 是用defineStore()定义的,它的第一个参数是一个独一无二的id,也是必须传入的,Pinia 将用它来连接 store 和 devtools。

defineStore()第二个参数可接受两类值:Setup函数或Options对象

state 属性: 用来存储全局的状态的,这里边定义的,就可以是为SPA里全局的状态了。

getters属性:用来监视或者说是计算状态的变化的,有缓存的功能。

actions属性:对state里数据变化的业务逻辑,需求不同,编写逻辑不同。说白了就是修改state全局状态数据的。

第一种Options式写法:

import { defineStore } from 'pinia'
//  `defineStore()` 的返回值命名最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾
export const useStudyStore = defineStore('studyId', {
  state: () => {
    return {
      counter: 0,
    }
  },
  getters:{},
  actions:{}
})

在Options式中:Store 的数据(data),getters 是 Store 的计算属性(computed),而actions则是 Store 的方法(methods)。

第二种Setup式写法:

import { defineStore } from 'pinia'
//  `defineStore()` 的返回值命名最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾
export const useStudyStore = defineStore('studyId', ()=>{
  const count = ref(0)
  const name = ref('Ghmin')
  const computedTest= computed(() => count.value * 99)
  function int() {
    count.value++
  }
  return { count, name, computedTest, int}

})

在Setup式中:ref()成为state属性,computed()变成getters,function变成actions

4.使用Store

使用上面两种方式其中一种后,便可以在组件中使用Store了。

<script setup>
import { useStudyStore } from '@/stores/study'
const store = useStudyStore();
</script>

二.具体使用及属性与方法

1.定义数据

import { defineStore } from 'pinia'
export const useStudyStore = defineStore('studyId', {
  state: () => {
    return {
      name: 'Ghmin',
      num:0
    }
  },
})

2.组件中使用

<template>
	<div>
		<h1>vue组件</h1>
		{{ name }}
	</div>
</template>

<script setup>
import { useStudyStore } from '@/stores/study'
const store = useStudyStore();
let { name } = store;
</script>

注:pinia可以直接修改state数据,无需像vuex一样通过mutations才可以修改,所以上面的let { name } = store 这种解构是不推荐的,因为它破坏了响应性。

而为了从 Store 中提取属性,同时保持其响应性,这里需要使用storeToRefs(),它将为每个响应性属性创建引用。当你只使用 Store 的状态而不调用任何action时,它会非常有用。使用方法如下

<template>
	<div>
		<h1>vue组件</h1>
		{{ name }}
	</div>
</template>

<script setup>
//这里需要先引入
import { storeToRefs } from 'pinia'
import { useStudyStore } from '@/stores/study'
const store = useStudyStore();
//这样解构的属性将保持响应性
let { name } = storeToRefs(store);
// name.value 可以直接修改到Store中存储的值

</script>

如果有多条数据要更新状态,推荐使用$patch方式更新。因为Pinia的官方网站,已经明确表示$ patch的方式是经过优化的,会加快修改速度,对程序的性能有很大的好处。

<template>
	<div>
		<h1>A组件</h1>
		{{ num}}
		{{ arr }}
		<button @click='btn'>按钮</button>
	</div>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { useStudyStore } from '@/stores/study'
const store = useStudyS
let { num,arr }  = storeToRefs(store);
const btn = ()=>{
	//批量更新
	store.$patch(state=>{
		state.num++;
		state.arr.push({name:'Ghmin'});

	})
}
</script>

actions:对state里数据变化的业务逻辑,需求不同,编写逻辑不同。说白了就是修改state全局状态数据的。

import { defineStore } from 'pinia'

export const useStudyStore = defineStore('studyId', {
  state: () => {
    return {
      num: 0
    }
  },
  getters:{},
  actions:{
  	changeNum( val ){
  		this.num+= val;
  	}
  }
})
<template>
	<div>
		<h1>使用actions</h1>
		{{ num}}
		<button @click='add'>加99</button>
	</div>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { useStudyStore } from '@/stores/study'
const store = useStudyStore();
let { num}  = storeToRefs(store);
const add = ()=>{
	store.changeNum(10);
}
</script>

getters:和vuex的getters几乎类似,用来监视或者说是计算状态的变化的,有缓存的功能。

import { defineStore } from 'pinia'

export const useStudyStore = defineStore('studyId', {
  state: () => {
    return {
      num: 0,
    }
  },
  getters:{
  	numGetters(){
  		return this.counter + 999;
  	}
  },
  actions:{}
})
<template>
	<div>
	    <h1>getters的使用</h1>
		{{ num}}
		{{ numGetters}}
	</div>
</template>
<script setup>
import { storeToRefs } from 'pinia'
import { useStudyStore } from '@/stores/study'
const store = useStudyStore();
let { num,numGetters}  = storeToRefs(store);
</script>

三.数据持久化存储

使用pinia-plugin-persist实现数据持久化存储,具体使用请跳转Pinia持久化存储

数据持久化存储

Vue3中的pinia使用(收藏版) pinia官方文档Pinia 的优点更多查看文档… 在main.js中引入pinia并创建容器挂载到根实例上 创建stores文件夹和index.js文件(这个文件以后基本不用管了) 在stores文件夹下创建counter.js文件。这个文件就是存有关counter相关的数据。(类似vuex的模块化) defineStore 是需要传参数的, 然后再组件中使用: 运行效果: 可以用vue3的调试工具看pinia案例需求,点击按钮加一: 一个不解构,一个不解构看看区别。 运行结 阅读详情

相关推荐

pinia和vuex进行数据持久化的方法(附源码)

可以通过插件 轻松实现。以下是具体步骤和配置方法: 2. 注册插件到 Pinia 在 中初始化 Pinia 并注册持久化插件: 3. 配置 Store 的持久化 在定义 Store 时,通过 选项启用持久化功能。以下是两种常见写法: 组合式 API 写法 4. 自定义持久化配置 插件支持灵活的配置选项,例如指定存储方式、持久化部分数据、修改存储键名等: 5. 验证持久化效果 检查浏览器存储: 打开开发者工具,进入 Application > Storage > Local Storage(

qq_45687669的博客 1220

Pinia安装使用和持久化和模块化

/ 你可以对 `defineStore()` 的返回值进行任意命名,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。(比如 `useUserStore`,`useCartStore`,`useProductStore`)// 第一个参数是你的应用中 Store 的唯一 ID。// 其他配置...})这个名字 ,也被用作 id ,是必须传入的, Pinia 将用它来连接 store 和 devtools。

前端工程师 · Vue 生态深耕者,专注多端与工程化 1万+

uniapp中pinia状态管理实战:结合pinia-plugin-unistorage实现持久化存储

本文详细介绍了在UniApp项目中,如何通过Pinia进行状态管理,并利用pinia-plugin-unistorage插件实现数据的持久化存储。文章以购物车场景为例,从环境搭建、插件配置到Store定义与组件使用,提供了完整的实战指南,帮助开发者解决应用重启后状态丢失的问题,提升用户体验。

weixin_29017445的博客 500

Pinia实现持久化保存数据

/ 安装插件时调用// 从本地存储中读取状态// 将本地存储的状态转换为 JSON// 恢复存储的状态// 监听 Pinia 状态的变化并将其保存到本地存储});},});这样就可以实现 Pinia 的状态持久化了。需要注意的是,对于大型应用程序,插件的自定义实现可能会变得复杂,因此建议使用第三方库来实现 Pinia 的持久化。

weixin_53156345的博客 8634

复古与新生:老毛子Padavan固件在旧设备上的现代化应用之旅

本文探讨了如何通过刷入Padavan固件,让小米路由器3G(R3G)等老旧设备重获新生,实现现代化应用。详细介绍了从硬件潜力分析、智能家居中枢搭建,到轻量级服务器部署和网络功能扩展的全过程,为技术爱好者提供了一条低成本、高性能的设备改造之路。

k8s6orchestrator的博客 1061

稳定双共轭梯度法BiCGSTAB流程

稳定双共轭梯度法BiCGSTAB流程

abner361的博客 1154

uni-app 从vue3项目创建到Pinia管理数据全局使用 持久化存储数据 详细教程

这是一个vue3配合pinia的详细教程 这里面的安装插件 尽量使用 yarn进行安装;persist有两种用法,如果persist: true 是存储全部的内容 ,把true换为paths: ['count'], 可以指定存储的数据

qq_52602294的博客 6577

大模型备案避坑指南:如何设计符合TC260标准的评估测试题集?

本文深入探讨了如何设计符合TC260标准的大模型评估测试题集,以顺利通过备案。文章从解构标准核心逻辑出发,详细阐述了题集设计的工程化流程、核心原则与常见误区,并提供了模拟真实对抗的高阶测试策略与度量分析方法,旨在帮助企业构建一套能真实反映模型安全水位、有效规避风险的评估体系。

kafka6courier的博客 663

vuejs3 pinia持久化存储

简单易用 受 vuex-persistestate 的启发而创建,你可以在 Pinia 上使用类似简单并且熟悉的 API。 高度可定制性 你可以自定义存储方式,自定义序列化配置和存储目标,并且可以对每个 Store 进行单独配置。 随处可用 兼容 Vue2 和 3、Nuxt(SSR)以及所有可以使用 Pinia 的产品。

宝码香车的博客 2489

从Starlink看NTN:SSB波束数量少,用户体验真的会差吗?

当SpaceX的Starlink以每月新增上百颗卫星的速度扩张其星座时,一个有趣的技术现象正在引发行业讨论:为何这个全球最大的低轨卫星网络选择使用相对较少的波束数量?波束数量的选择远非简单的技术参数,而是系统设计哲学、商业策略与终端用户体验的复杂平衡。传统地面网络可以依赖密集基站实现精准覆盖,而卫星通信必须面对一个根本性挑战:如何在数百公里的高空,用有限的射频资源服务广阔的地理区域。当我们在撒哈拉沙漠测试不同波束方案时,发现了一个关键洞见:最佳波束数量不是固定的技术参数,而是随网络发展阶段变化的动态值。

weixin_32308101的博客 334

lerobot VLA--SmolVLA代码的讲解

2.图像resize至正方形224x224,图像长宽比不变,其他区域用黑色补充,标记为mask=1,若占位图像(摄像头缺失),则 创建全-1像素的占位图像 标记为mask=0,image为[1, 3, 512, 512],img_mask为True,masks列表长度为2,img_masks为2,因为我这里两个相机。文本嵌入:通过embed_language_tokens() 被转换为嵌入表示,lang_emb 是语言的嵌入,包含了语言的语法和语义信息。1.像素值[0,1]->[-1,1]

caokaifa的博客 4068

pinia使用和持久化存储

1、安装持久化存储插件 pinia-plugin-persistedstate。项目构建时选择安装pinia,下面是使用方法以及持久化存储配置。3、在/src/store/目录下新建user.ts。

不求甚解的博客 4257

保姆级教程:用Unidbg搞定阿里系App的x-sign和长x-mini-wua签名(附完整Java代码)

本文详细介绍了如何使用Unidbg框架模拟执行阿里系App的原生库,生成关键的x-sign和x-mini-wua签名参数。通过完整的Java代码示例和实战技巧,帮助开发者高效实现签名算法,适用于安全研究、数据分析和第三方应用开发场景。

weixin_29243279的博客 487

Pinia持久化插件终极指南:轻松实现状态数据本地存储

Pinia持久化插件是Vue.js生态中一个强大的工具,专门用于为Pinia状态管理库提供可配置的持久化功能。无论你是构建单页应用还是复杂的Web应用,这个插件都能让你的状态数据在页面刷新后依然保持完整。✨ ## 为什么需要Pinia持久化? 在Web开发中,状态管理是现代应用的核心。然而,浏览器刷新会导致所有内存中的状态数据丢失,这给用户体验带来了挑战。Pinia持久化插件通过将状态数据保存

gitblog_01143的博客 447

【OpenCV】手眼标定实战:从原理到calibrateHandEye的完整实现

本文详细解析了机器人视觉中的手眼标定原理与实战,重点介绍了如何使用OpenCV的calibrateHandEye函数实现从数据采集到结果验证的完整流程。文章深入剖析了AX=XB核心方程,区分了眼在手上与眼在手外两种配置,并提供了详细的代码示例与避坑指南,帮助开发者精准建立相机与机械臂末端的坐标转换关系,是机器人精准抓取的关键技术。

weixin_29046611的博客 509

Stable Diffusion 模型分享:Beautiful Realistic Asians(美丽真实的亚洲人)

Beautiful Realistic Asians(BRA)模型是由作者自己训练而成的一个独立模型,它是一个真实模型,并且是一个针对亚洲人训练的模型,可以生成非常漂亮的亚洲小姐姐。条目内容类型大模型基础模型SD 1.5来源CIVITAI作者文件名称文件大小1.99GB。

水滴的博客 2157

unibest状态管理:Pinia持久化存储

还在为uniapp应用状态丢失而烦恼?每次刷新页面用户信息就消失?本文将深入解析unibest框架中Pinia状态持久化存储的最佳实践,让你彻底告别状态丢失的困扰! 通过阅读本文,你将掌握: - ✅ Pinia持久化存储的核心原理与配置 - ✅ unibest框架中用户状态管理的完整实现 - ✅ 跨端存储适配与uni-app存储API的完美结合 - ✅ 实战案例:用户登录状态持久化最佳实践 - ...

gitblog_00223的博客 791

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Pinia 数据持久化存储插件pinia-plugin-persistedstate

【代码】Pinia 数据持久化存储插件pinia-plugin-persist。

lryh_的博客 1832

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Pinia持久化状态管理终极指南:如何轻松实现数据持久化

在Vue.js应用开发中,状态管理是至关重要的一环。Pinia作为Vue的官方状态管理库,凭借其简洁的API和TypeScript支持,已经成为开发者的首选。然而,当页面刷新或浏览器关闭时,Pinia存储的状态就会丢失,这给用户体验带来了不小的挑战。😕 **pinia-plugin-persistedstate** 就是为了解决这个问题而生的终极解决方案!这个强大的插件能够轻松实现Pinia存

gitblog_00084的博客 988

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

如何通过pinia-plugin-persistedstate实现数据持久化?

pinia配套的本地存储插件pinia-plugin-persistedstate的详细使用步骤

i-cat的博客 1576

Pinia状态持久化:本地存储与恢复策略

在现代Web应用中,用户期望页面刷新或重新打开后仍能保留之前的操作状态。例如电商网站的购物车、用户偏好设置或表单填写进度等。Pinia作为Vue生态中推荐的状态管理库,虽然自身未内置状态持久化功能,但通过其灵活的插件系统和订阅机制,我们可以轻松实现状态的本地存储与恢复。本文将详细介绍如何在Pinia中实现可靠的状态持久化方案,解决页面刷新导致状态丢失的痛点。 ## 状态持久化的核心方案 Pin...

gitblog_00927的博客 478

pinia-plugin-persistedstate 终极指南:让 Pinia 状态持久化变得简单

在 Vue.js 应用开发中,状态管理是构建复杂应用的关键环节。Pinia 作为 Vue 官方推荐的状态管理库,提供了优秀的开发体验。然而,当用户刷新页面时,所有状态都会重置,这给用户体验带来了挑战。pinia-plugin-persistedstate 插件正是为了解决这一问题而生,让 Pinia 状态持久化变得简单高效。 ## 🚀 为什么需要状态持久化? 想象一下这样的场景:用户在购物车

gitblog_00322的博客 797

Pinia Plugin Persist 教程

Pinia Plugin Persist 教程 1. 项目介绍 Pinia Plugin Persist 是一个用于 Vue.js 应用的 Pinia 插件,它允许你在浏览器的 sessionStorage 或其他存储中持久化 Pinia 的状态数据。该项目受到了 vuex-persistedstate 的启发,简化了 Pinia 中的数据持久化过程。 2. 项目快速启动 安装依赖 在你的项目中安...

gitblog_00756的博客 1166

AI如何帮你快速集成Pinia持久化插件

比如,我们可以要求AI创建一个用户信息的store,并指定使用localStorage作为存储介质。我们还可以让AI为持久化功能添加一些定制配置,比如指定存储的key前缀、选择哪些state需要持久化等。这些配置都可以通过简单的自然语言描述来完成,AI会帮我们转换成正确的代码。而且因为项目是完整的web应用,我们可以直接使用平台的部署功能,一键将示例项目上线查看效果。最后,AI会生成示例组件代码,展示如何在实际组件中使用这个持久化的store。但现在,借助AI工具,这个过程可以变得非常简单。

RubyLion28的博客 626

【 Vue 拓展 | (一) 】:一个案例搞懂 pinia 的使用

符合直觉的 Vue.js 状态管理库在学习之前,先来了解什么是 pinia 以及为什么要使用 pinia 👇比如说这是一个项目的基础结构,当组件很少的时候可以通过组件通信来解决,但当组件多了起来这样再去实现组件通信就显得尤其困难,所以需要一个库可以替我们集中式存放很多组件中需要共享的数据(状态),这就是pinia的官方介绍符合直觉的 Vue.js 状态管理库,比如常见的用户登录数据、购物车数据都属于多组件共享的数据,需要一个地方集中式的存储和读取等等。pinia相比于 另一个状态管理库vuex。

kkq的博客 2051

vue3 + pinia数据持久化加密处理

我们要想对pinia的全局状态持久化,可以选择使用插件;而要想对这些状态数据进一步加密处理,我们可以通过自定义Storage(类似于后端中的接口实现)来结合一些加密库,例如secure-ls来实现。

qq_42351255的博客 1704
上一篇: 前端实现导出下载excel文件(Blob数据类型)
下一篇: Pinia实现数据持久化存储
琢鸣
琢鸣 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域
博客等级 码龄7年 9626粉丝 53原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

琢鸣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值