vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3 pinia

Vue3中的存储库pinia概述

作者:昭南。

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文