vue3中pinia的使用及持久化(详细解释)

解释一下pinia:

Pinia是一个基于Vue3的状态管理库,它提供了类似Vuex的功能,但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中,并且将store的行为和数据暴露为可响应的API,从而实现数据(或方法)在各个组件之间的共享和修改;

1、新建一个vue3项目,并导入pinia的依赖:

npm install pinia

2、在main.ts中引入pinia:

import './assets/main.css'import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'const app = createApp(App)const pinia = createPinia()
app.use(pinia)
app.use(router)app.mount('#app')

3、在src目录下,新建一个stores文件夹。我们在这个文件夹中进行pinia的使用;

新建一个counter.ts文件,在这个文件中定义一个变量count,使这个count变量能被所有的组件共享,并修改其值;

countrt.ts的代码如下:

import { ref } from 'vue'
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', () => {const count = ref(0)return { count}
})

解释一下:

defineStore :是pinia使用中必须要引入的一个函数,它是用于定义一个新的store的函数。

在Pinia中,每个store都需要使用defineStore函数进行定义,并传入一个配置对象来描述store的行为和数据。

defineStore 一般要传递两个参数,第一个是store函数的名称,一般这个名称要做到见名知义、第二个是这个store函数的具体逻辑。

可以在这里面定义属性、方法等。但是这些定义过的属性和方法一定要通过return交出去才行

如上图,我们顶义一个count变量,并通过return返回了出去。那么现在就可以在任意组件中查看count的值,并进行修改了。

4、使用pinia:

要在组件中使用pinia定义的store函数,第一步是要先引入store:


import { useCounterStore } from '@/stores/counter';

第二步,定义一个参数来接收这个useCounterStore函数:

const counterStore = useCounterStore();

第三步,直接在需要的位置引入counterStore中的参数即可

(可以是属性,也可以是方法。但是有一点要注意,就是必须要是return交出去的才可以;)

从pinia中取到的数据{{ counterStore.count }}

启动vue3项目,查看

可以看到确实能获取到pinia中定义的数据count;

如果想要修改count,可以直接在数值上修改:
 

const addCount = () => {

counterStore.count++;

}

定义一个按钮,并绑定事件:修改结果如图:

这个修改是全局的,你在另一个组件中也可以观察到pinia中数据的变化:

但是pinia有一个不好的地方就是它默认是内存存储,你只要一刷新浏览器就会丢失数据。

我们这时候可以借助pinia的持久化插件persist来解决;

1、下载persist持久化插件:

npm install pinia-plugin-persistedstate

2、在pinia中使用persist

import './assets/main.css'import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
// 1、pinia的持久化插件
import { createPersistedState } from 'pinia-plugin-persistedstate'const app = createApp(App)//2、 接收createPersistedState函数
const piniaPersistedState = createPersistedState()const pinia = createPinia()
// 3、在pinia中引入持久化插件
pinia.use(piniaPersistedState)app.use(pinia)
app.use(router)app.mount('#app')

3、在定义状态store的时候指定持久化配置参数:{persist:true}

import { ref } from 'vue'
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', () => {const count = ref(0)return { count}
},
{persist: true})

引入了pinia的持久化插件之后,我们再刷新页面,那么piniade的store函数中的数据也就持久的保存了。

其实这个插件底层也是使用了localstorage,将数据存储到了浏览器中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311301.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV-11颜色通道的分离与合并

本次我们使用两个比较重要的API split(mat)将图像的通道进行分割。 merge((ch1,ch2,ch3))将多个通道进行融合。 示例代码如下: import cv2 import numpy as npimg np.zeros((480, 640, 3),…

独立站的营销策略:吸引顾客的秘密武器

一、独立站的重要性 独立站是指企业自主建立的电子商务网站,具有独立的域名和运营管理权。通过独立站,企业可以展示产品信息、提供在线服务、进行促销活动等,与顾客建立互动和信任关系。独立站的重要性在于它可以帮助企业建立品牌认知度、提…

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…

计算机组成原理复习7

内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用&#xff08;层次&#xff09;分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度&#xff1a;数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…

我与旧事归于尽,来年依旧迎花开。

弹指间&#xff0c;这一年辗转已过&#xff0c;今天已是2023年的最后一天。 这一年里&#xff0c;烦累有时&#xff0c;苦痛亦有时&#xff0c;每个人都过得艰辛&#xff0c;活得不易。 这一年里&#xff0c;自己对于生活、工作的规划安排相较于2022年稍微规整了些。 在生活…

STM32H743 各个外设功能整理

在整理工程时看到芯片很多的外设自己都没有使用到&#xff0c;用到的只有三分之一左右&#xff0c;遂参考芯片手册和网上的资料对芯片的外设功能进行了一些整理&#xff0c;之后需要用到这些功能时可以及时的查到。 注意&#xff1a;该表格是以hal库名称为基础整理的&#xff0…

迭代归并:归并排序非递归实现解析

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 归并排序的思想上我们已经全部介绍完了&#xff0c;但是同时也面临和快速排序一样的问题那就是递…

Python教程(19)——python异常处理

异常处理 什么是异常异常处理方式try-except语句捕获异常类型 相关的异常类型 什么是异常 在计算机编程中&#xff0c;异常&#xff08;Exception&#xff09;是指在程序执行过程中发生的错误或异常情况。当出现异常时&#xff0c;程序无法正常继续执行&#xff0c;因此需要采…

YGG 2023 年度回顾

2023 年对 Yield Guild Games&#xff08;YGG&#xff09;来说是忙碌的一年&#xff0c;我们专注于建设和推出新的提案。通过公会晋升计划&#xff08;GAP&#xff09;和新的「超级任务」板块&#xff0c;公会促进了社区学习和成长&#xff0c;同时加大了对任务和声誉的投入力度…

【设计模式-1】图文并茂:单例模式的使用场景及7种代码实现

接上一篇&#xff1a;【设计原则】程序设计7大原则 1.什么是单例模式 在了解单例模式前&#xff0c;我们先来看一下它的定义&#xff1a; 确保一个类只有一个实例&#xff0c;而且自行实例化并且自行向整个系统提供这个实例&#xff0c;这个类称为单例类&#xff0c;它提供全局…

Git:常用命令(二)

查看提交历史 1 git log 撤消操作 任何时候&#xff0c;你都有可能需要撤消刚才所做的某些操作。接下来&#xff0c;我们会介绍一些基本的撤消操作相关的命令。请注意&#xff0c;有些操作并不总是可以撤消的&#xff0c;所以请务必谨慎小心&#xff0c;一旦失误&#xff0c…

详解Med-PaLM 2,基于PaLM 2的专家级医疗问答大语言模型

详解Med-PaLM 2&#xff0c;基于PaLM 2的专家级医疗问答大语言模型 - 知乎 目录 摘要&#xff1a; 1 介绍 2 相关工作 3 方法 3.1 数据集 3.2 建模 3.3 多项选择评估 3.4 重叠分析 &#xff08;Overlap analysis &#xff09; 3.5 长形式评估&#xff08;Long-form ev…