vue3使用pinia和pinia-plugin-persist做持久化存储

这篇具有很好参考价值的文章主要介绍了vue3使用pinia和pinia-plugin-persist做持久化存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

插件和版本
vue3使用pinia和pinia-plugin-persist做持久化存储,vue3,pinia,数据持久化

1、安装依赖

npm i pinia // 安装 pinia
npm i pinia-plugin-persist // 安装持久化存储插件

2、main.js引入

vue3使用pinia和pinia-plugin-persist做持久化存储,vue3,pinia,数据持久化


import App from './App.vue'
const app = createApp(App)

//pinia
import { createPinia } from 'pinia'
import piniaPersist from 'pinia-plugin-persist' //持久化插件
const pinia = createPinia()
pinia.use(piniaPersist)
app.use(pinia)

app.mount('#app')


3、在src下新建store文件,在store文件内新增home.js:

vue3使用pinia和pinia-plugin-persist做持久化存储,vue3,pinia,数据持久化

src/store/home.js(可直接复制)

import { defineStore } from 'pinia'
// useMain  可以是 useUser、useCart 之类的名字 返回的函数统一使用useXXX作为命名方案,这是约定的规矩
// defineStore('main',{..}) 在devtools 就使用 main 这个名
/*defineStore 是需要传参数的,其中第一个参数是id,就是一个唯一的值,
简单点说就可以理解成是一个命名空间.
第二个参数就是一个对象,里面有三个模块需要处理,
第一个是 state,第二个是 getters,第三个是 actions。
*/
export const useMain = defineStore('main', {
    // 相当于data
    state: () => {
        return {
          // 所有这些属性都将自动推断其类型,如果推断失败可以试下 as xxx
          counter: 0,
          name: 'Eduardo',
          objPer:{
            age:18,
            like: '唱跳rap'
          }
        }
    },
    // 相当于计算属性
    getters: {
        doubleCount: (state) => {
            return state.counter * 2
        },
    },
    // 相当于vuex的 mutation + action,可以同时写同步和异步的代码
    actions: {
        increment() {
          //this.是store实例
          this.counter++
        },
        randomizeCounter(num) {
            setTimeout(() => {
                //this.是store实例
                // this.counter = Math.round(100 * Math.random())
                this.counter = num
            }, 0);
        },
    },

    //配合pinia-plugin-persist插件 持久化 默认存储到 sessionStorage ,key 为 store 的 id
    persist: {
      enabled: true,
    }
})

4、在页面A内使用获取值以及修改值(可直接复制)

<template>
  <div>{{ name }}</div>
  <div>counter:{{ counter }}</div>
  <div>doubleCount:{{ doubleCount }}</div>
  <div>objPer:{{ objPer }}</div>
  <a-button @click="changeCounter">修改counter</a-button>
  <br>
  <a-button type="primary" @click="main.increment()">counter++</a-button>
  <br>
  <a-button @click="amend()">修改多个</a-button>
</template>
<script setup lang='ts'>

//引入想要的pinia文件 {} 里面就是对应导出的名字
import { useMain } from '../store/home'
import { storeToRefs } from 'pinia';

const main = useMain()
// 解构main里面的state和getters的数据,
// 使用storeToRefs解构才有响应式,响应式可以直接修改数据,不过这我只用来渲染
let { counter, name, doubleCount, objPer } = storeToRefs(main)

//(常用方法三种)
//常用方法一: 使用数据
console.log(counter.value);
//使用方法(方法目前不能解构)
main.increment()
console.log(counter.value);

// 常用方法二:修改数据
counter.value = 9999
console.log(counter.value);

objPer.value = {
  age:1,
  like:'哎呦 你干嘛~'
}

//常用方法三:
//进阶使用$patch,多个修改
const amend = () => {
  main.$patch((state) => {
    state.counter += 10;
    state.name = '张三'
    state.objPer = {
      age:11,
      like:'鸡你太美~'
    }
  })
}

function changeCounter(){
  main.randomizeCounter(Math.round(100 * Math.random()))
}

</script>

5、在页面B内引入并使用和查看值(可直接复制)


<template>

  <div>objPer:{{ objPer }}</div>
  <button @click="resetStore">重置pinia</button>
</template>
<script>
//引入想要的pinia文件 {} 里面就是对应导出的名字
import { useMain } from '../../store/home'
import { storeToRefs } from 'pinia';

const main = useMain()
// 解构main里面的state和getters的数据,
// 使用storeToRefs解构才有响应式,响应式可以直接修改数据,不过这我只用来渲染
let { objPer } = storeToRefs(main)


export default {
  name: 'test',
  setup () {

    // 重置pinia
    function resetStore(){
      main.$reset()
    }
    // 将变量和函数返回,以便在模版中使用
    return {
      objPer,
      resetStore
    }
  }
}
</script>


6、查看值

vue3使用pinia和pinia-plugin-persist做持久化存储,vue3,pinia,数据持久化
vue3使用pinia和pinia-plugin-persist做持久化存储,vue3,pinia,数据持久化

参考文章1
参考2
参考3文章来源地址https://www.toymoban.com/news/detail-645759.html

到了这里,关于vue3使用pinia和pinia-plugin-persist做持久化存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3状态管理库Pinia——自定义持久化插件

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年02月13日
    浏览(35)
  • Pinia 数据持久化储存(pinia-plugin-persistedstate)

    插件官网地址: https://prazdevs.github.io/pinia-plugin-persistedstate/guide/config.html 这里对插件的安装就不多赘述了,放两张官网的截图 使用命令:npm i pinia-plugin-persistedstate (1)将store的state中的全部数据进行缓存,直接在state同级下面添加persist对象 此时,默认将数据存放在浏览器的

    2024年02月01日
    浏览(38)
  • 从零开始Vue3+Element Plus后台管理系统(六)——状态管理Pinia和持久化

    官网:https://pinia.vuejs.org/zh/ Pinia 是 Vue 的专属状态管理库,相比Vuex更好用,优点不多了说官网有,用起来最重要! 在应用的根部注入创建的 pinia 定义store,拿用户登录举个简单例子 在src目录新建文件夹store,然后新建文件user.ts 在Vue页面中使用Pinia 如果我们把登录用户的信息

    2024年02月05日
    浏览(44)
  • react中使用redux-persist做持久化储存

    某天下午折腾着玩的 – 笔记 安装相关依赖 将 store 提供给应用程序:将 Redux store 提供给根组件,以便在整个应用程序中可以访问到 Redux 状态 reducer 示例: 在组件中使用

    2024年02月14日
    浏览(38)
  • Vue3中使用pinia

    目录 1、安装:npm install pinia 2、创建store文件并配置内部的index.js文件 3、main.js文件中配置 4、组件使用 4-1、 store.$reset()    4-2 store.$patch  5.订阅修改 6.Getter 7、Actions 效果图  点击按钮,界面变化  说明成功修改了pinia里面的数据,且界面刷新证明这种直接修该pinia数据的方式

    2024年02月07日
    浏览(40)
  • vue3项目中使用pinia

    前言: 官网地址 https://pinia.vuejs.org/zh/ 中文文档 https://pinia.web3doc.top/ pinia    作为Vue.js 状态管理库 类型安全、可扩展性以及模块化设计。 甚至让你忘记正在使用的是一个状态库。 优点:   优点 dev-tools 支持 跟踪动作、突变的时间线 Store 出现在使用它们的组件中 time travel

    2023年04月26日
    浏览(45)
  • vue3探索——pinia高阶使用

    以下是一些 Pinia 的其他高阶功能: storeToRefs() :响应式解构仓库,保证解构出来的数据是响应式的数据。 状态持久化 :Pinia 并没有内置的状态持久化功能,但你可以使用第三方库或自定义插件来实现状态的持久化。例如,你可以使用  localStorage  或  sessionStorage  来将状态

    2024年02月08日
    浏览(34)
  • pinia在vue3中的使用

    总结: 在store文件夹中建一个pinia的文件userStore.js 1.要想使用pinia必须先引入defineStore  这里我们使用es6的模块化语法导出的   import { defineStore } from \\\'pinia\\\' 2.然后使用export const useUserStore = defineStore(\\\'user\\\',{})   defineStore 方法有两个参数,第一个参数是模块化名字(也就相当于身份

    2024年02月15日
    浏览(36)
  • Vue3 store+pinia 基本使用

    pinia是一个 状态管理的库 ,用于 跨组件、页面进行状态共享 (这和Vuex、Redux一样),用起来像组合式API Pinia和Vuex有什么区别 1、PInia的最初是为了探索Vuex的下一次迭代会是什么样子,结合了Vuex核心团队讨论中的许多想法; 2、最终,团队意识到Pinia已经实现了Vuex5中大部分内

    2024年02月07日
    浏览(52)
  • Vue3中的pinia使用(收藏版)

    💂 个人网站:【紫陌】【笔记分享网】 💅 想寻找共同学习交流、共同成长的伙伴,请点击【前端学习交流群】 pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。就是和vuex一样的实现数据共享。 依据Pinia官方文档,Pinia是2019年由vue.js官方成员重新设计的新一代状态管理

    2024年01月25日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包