Pinia 及其数据持久化 Vue新一代状态管理插件

黑马前端Vue新一代状态管理插件Pinia快速入门视频教程
Pinia主页

超级简单,不需要耐心

pinia :新一代的VueX

1. 安装

npm install pinia

2. 在main.js中引入

import { createPinia } from 'pinia'
app.use(createPinia())

3. 新建stores目录,新建.js文件

pinia的使用和在setup中写的代码基本一致,记得`ruturn`数据就行
// path:@/stores/counter.js
import {computed, ref} from "vue";
import {defineStore} from 'pinia'
// 第一个参数是 store 的唯一标识id
export const useCounterStore = defineStore('counter',()=>{
    // VueX:state,数据
    const count = ref(0)
    // VueX:getters,计算属性
    const doubleCount = computed(() => count.value * 2)
    // VueX:actions + mutations,方法
    function increment(){
        count.value++
    }
    return { count, doubleCount, increment }
})

4. 使用

在vue中导入pinia后需要**赋值操作**,然后使用`.`来访问pinai中的数据和方法
App.vue
<template>
    计数器:{{countStore.count}}<br>
    加倍计数器:{{countStore.doubleCount}}<br>
    <button @click="countStore.increment">点我加1</button>
</template>

<script setup>
// 引入stroe文件
import {useCounterStore} from "@/stores/counter"
const countStore = useCounterStore()
// 不结构不需要使用value
console.log(countStore.count)
</script>

5. 另一种使用方式,对store解构,不使用countStore.去访问store中的数据和方法

<template>
    计数器:{{count}}<br>
    加倍计数器:{{doubleCount}}<br>
    <button @click="increment">点我加1</button>
</template>

<script setup>
import {useCounterStore} from "@/stores/counter"
import {storeToRefs} from "pinia";
// 得到store的实例对象
const countStore = useCounterStore()
// 对state的解构需要使用storeToRefs方法
const { count, doubleCount } = storeToRefs(countStore)
// 对action的结构,直接干
const {increment} = countStore
// 解构后使用时加value
console.log(count)
</script>

pinia-plugin-persistedstate : 数据持久化

视频
主页

1. 安装

npm : npm i pinia-plugin-persistedstate

2. main.js中pinia使用插件

import { createApp } from 'vue'
import App from './App.vue'

import { createPinia} from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'

const pinia = createPinia() // 创建pinia实例
pinia.use(piniaPluginPersistedstate) // pinia使用持久化插件
createApp(App).use(pinia).mount('#app')

3. 最简单粗暴的用法,将state数据保存在localstorage(关闭浏览器数据清空)

在这里插入图片描述
查看保存在localstorage中的结果
在这里插入图片描述

4. 保存到session storage中(session storage关闭页面丢失数据)

只需要给persist加个对象,paths中是要保存的数据的名字
    persist: {
        storage: sessionStorage,
        paths:['count']
    }

在这里插入图片描述

什么是持久化?

1. 非持久化

在这里插入图片描述

2. 持久化

在这里插入图片描述

持久化的坑

  1. 记住一句话:网页上使用的数据如果已经被持久化保存了,那这个变量就会先去读持久化保存的数据
    在写代码的时候,记得手动清除localStorage里面的东西
  2. store中要持久化保存的数据都用ref(),不要用reactiv(),不要用reactiv(),不要用reactiv()
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Pinia 是一个基于 Vue3 的状态管理库,它本身并没有提供数据持久化的功能。不过可以借助其他库来实现数据持久化,比如 `localStorage`、`sessionStorage`、IndexedDB 等。 下面以 `localStorage` 为例,介绍如何在 Pinia 中实现数据持久化。 首先需要安装 `@vueuse/core` 库: ``` npm install @vueuse/core ``` 然后,在创建 Pinia 实例之前,通过 `useStorage` 方法创建一个本地存储实例: ```javascript import { createPinia } from 'pinia' import { useStorage } from '@vueuse/core' const localStorage = useStorage('my-app') const pinia = createPinia() // 在创建 store 时,使用本地存储实例作为插件 pinia.use(({ store }) => { store.$subscribe((mutation) => { localStorage.setItem(mutation.type, JSON.stringify(mutation.payload)) }) }) ``` 在上面的代码中,我们通过 `useStorage` 方法创建了一个名为 `my-app` 的本地存储实例,并在创建 Pinia 实例后,通过 `pinia.use` 方法将其作为插件使用。每次 state 发生变化时,我们将变化的内容以 JSON 格式保存到本地存储中。 如果需要在应用初始化时将本地存储中的数据还原到 state 中,可以在 store 中添加一个 `init` 方法: ```javascript const store = defineStore({ id: 'myStore', state: () => ({ count: 0 }), actions: { init() { Object.keys(localStorage).forEach((key) => { this.$patch({ [key]: JSON.parse(localStorage.getItem(key)) }) }) } } }) ``` 在 `init` 方法中,我们遍历本地存储中的所有 key,并将对应的 value 还原到 state 中。 最后,在应用初始化时,可以调用 store 的 `init` 方法来还原数据: ```javascript createApp(App).use(pinia).mount('#app') // 在应用初始化时执行 store 的 init 方法 pinia.store.$init() ``` 这样,就可以实现 Pinia 中的数据持久化了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值