Vue3中的存储库pinia概述

 更新时间:2025年06月27日 16:00:43   作者:昭南。  
Pinia是Vue3的状态管理库,替代Vuex,支持跨组件共享状态、修改数据及持久化存储,通过pinia-plugin-persist插件实现数据持久化,需在main.ts和store配置中引入,本文给大家介绍Vue3中的存储库pinia,感兴趣的朋友一起看看吧

1、pinia是什么?

如果你学过Vue2,那么你一定使用过Vuex。我们都知道Vuex在Vue2中主要充当状态管理的角色,所谓状态管理,简单来说就是一个存储数据的地方,存放在Vuex中的数据在各个组件中都能访问到,它是Vue生态中重要的组成部分。

在Vue3中,可以使用传统的Vuex来实现状态管理,也可以使用最新的pinia来实现状态管理,我们来看看官网如何解释pinia的。

Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。

2.安装

npm install pinia

3、main.ts使用

import { createApp } from "vue";
import App from "./App.vue";
const app = createApp(App);
import { createPinia } from "pinia";
const pinia = createPinia();
app.use(pinia);
app.mount("#app");

4、使用store

// 想要使用必须先引入 defineStore;
import { defineStore } from 'pinia';
// 这里我们使用的是es6 的模块化规范进行导出的。
// defineStore 方法有两个参数
// 第一个参数是模块化名字(也就相当于身份证一样,不能重复)
// 第二个参数是选项,对象里面有三个属性,相比于vuex 少了一个 mutations.
export const useStore = defineStore('main', {
  state:()=> {  // 存放的就是模块的变量
    return {
      name: "小猪课堂",
      age: 25,
      sex: "男",
      num:13
    }
  },
  getters: { // 相当于vue里面的计算属性,可以缓存数据
  },
  actions: { // 可以通过actions 方法,改变 state 里面的值。
  }
})

5、读取state数据

<template>
  <p>姓名:{{ name }}</p>
  <p>年龄:{{ age }}</p>
  <p>性别:{{ sex }}</p>
</template>
<script setup lang="ts">
    import { ref } from "vue";
    import { useUsersStore } from "../src/store/user";
    const store = useUsersStore();
    const name = ref<string>(store.name);
    const age = ref<number>(store.age);
    const sex = ref<string>(store.sex);
</script>

解构代码如下:

<template>
  <h1>
    <!-- 使用pinia -->
    {{ count }} <br />
    {{ num }} <br />
    <input type="text" v-model="count">
  </h1>
</template>
<script lang="ts" setup>
// 引入pinia
import { useStoreIndex } from "@/store/index";
// storeToRefs将state中的变量解构出来,解构出来的数据是双向联动的,是ref对象
import { storeToRefs } from "pinia";
let store = useStoreIndex()
// 两种方法都可以解构出来state数据,但是普通解构出来的无法实现双向联动
const { count, num } = storeToRefs(store);
</script>

6、修改多个数据

const handleAdd = () => {
  // 方法1
  // store.name=李四
  // 方法2:可以同时修改多个数据
  store.$patch({
    sex: store.sex + 1,
    num:store.num+10
  });
};

7、持久化存储

7.1 安装:pinia-plugin-persist

npm install pinia-plugin-persist

7.2 在main.ts中引入

// 1 引入pinia,并解构赋值其中的createPinia 方法
import { createPinia } from 'pinia';
const pinia = createPinia();
// 引入持久化存储插件
import piniaPersist from 'pinia-plugin-persist'
// 在pinia中使用持久化存储插件
pinia.use(piniaPersist);
// 2 在vue实例中使用pinia
app.use(pinia)

7.3 在store/index.ts中引入.与state、actions同级

persist: { // 开启存储
    enabled: true,
    // 配置持久化
    strategies: [
      {
        // key是属性,可以省略,省略默认是defineStore第一个属性main
        key:"zx",
        // 指定存储的位置以及存储的变量都有哪些,该属性可以不写,
        //在不写的情况下,默认存储到 sessionStorage 里面,默认存储 state 里面的所有数据。
        storage: localStorage,
        // paths 是一个数组,如果写了 就会只存储 count 变量,当然也可以写多个。
        paths: ["count", "num", "token", "userName"]
      },
    ]
  },

到此这篇关于Vue3中的存储库pinia概述的文章就介绍到这了,更多相关Vue3 pinia内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue.set() (this.$set)的用法及说明

    vue.set() (this.$set)的用法及说明

    这篇文章主要介绍了vue.set() (this.$set)的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Vue实现导航栏菜单

    Vue实现导航栏菜单

    这篇文章主要为大家详细介绍了Vue实现导航栏菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • Vue组件之事件总线和消息发布订阅详解

    Vue组件之事件总线和消息发布订阅详解

    这篇文章主要为大家详细介绍了Vue组件之事件总线和消息发布订阅,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 脚手架vue-cli工程webpack的基本用法详解

    脚手架vue-cli工程webpack的基本用法详解

    这篇文章主要介绍了vue-cli工程webpack的基本用法,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-09-09
  • vue项目之index.html如何引入JS文件

    vue项目之index.html如何引入JS文件

    这篇文章主要介绍了vue项目之index.html如何引入JS文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • vue3接口数据赋值对象,渲染报错问题及解决

    vue3接口数据赋值对象,渲染报错问题及解决

    这篇文章主要介绍了vue3接口数据赋值对象,渲染报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Vue重定向redirect的三种写法总结

    Vue重定向redirect的三种写法总结

    这篇文章主要介绍了Vue重定向redirect的三种写法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • 深入理解Vue-cli搭建项目后的目录结构探秘

    深入理解Vue-cli搭建项目后的目录结构探秘

    本篇文章主要介绍了深入理解Vue-cli搭建项目后的目录结构探秘,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • vue之邮箱、密码、手机号码等输入验证规则说明

    vue之邮箱、密码、手机号码等输入验证规则说明

    这篇文章主要介绍了vue之邮箱、密码、手机号码等输入验证规则说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vscode 插件开发 + vue的操作方法

    vscode 插件开发 + vue的操作方法

    这篇文章主要介绍了vscode 插件开发 + vue的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论