• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    vue3中pinia的使用及持久化的实现

    发布者: Error | 发布时间: 2025-6-16 07:36| 查看数: 126| 评论数: 0|帖子模式

    解释一下pinia:
    Pinia是一个基于Vue3的状态管理库,它提供了类似Vuex的功能,但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中,并且将store的行为和数据暴露为可响应的API,从而实现数据(或方法)在各个组件之间的共享和修改;
    1、新建一个vue3项目,并导入pinia的依赖:
    1. npm install pinia
    复制代码
    2、在main.ts中引入pinia:
    1. import './assets/main.css'

    2. import { createApp } from 'vue'
    3. import { createPinia } from 'pinia'
    4. import App from './App.vue'
    5. import router from './router'

    6. const app = createApp(App)

    7. const pinia = createPinia()
    8. app.use(pinia)
    9. app.use(router)

    10. app.mount('#app')
    复制代码
    3、在src目录下,新建一个stores文件夹。我们在这个文件夹中进行pinia的使用;
    新建一个counter.ts文件,在这个文件中定义一个变量count,使这个count变量能被所有的组件共享,并修改其值;
    countrt.ts的代码如下:
    1. import { ref } from 'vue'
    2. import { defineStore } from 'pinia'

    3. export const useCounterStore = defineStore('counter', () => {
    4.   const count = ref(0)
    5. // 定义一个方法,直接清空count
    6. const clearCount = () => {
    7. count.value=0
    8. }

    9.   return { count,clearCount}
    10. })
    复制代码
    解释一下:
    defineStore :是pinia使用中必须要引入的一个函数,它是用于定义一个新的store的函数。
    在Pinia中,每个store都需要使用
    1. defineStore
    复制代码
    函数进行定义,并传入一个配置对象来描述store的行为和数据。
    defineStore 一般要传递两个参数,第一个是store函数的名称,一般这个名称要做到见名知义、第二个是这个store函数的具体逻辑。
    可以在这里面定义属性、方法等。但是这些定义过的属性和方法一定要通过return交出去才行
    如上图,我们顶义一个count变量,并通过return返回了出去。那么现在就可以在任意组件中查看count的值,并进行修改了。
    4、使用pinia:
    要在组件中使用pinia定义的store函数,第一步是要先引入store:
    1. import { useCounterStore } from '@/stores/counter';
    复制代码
    第二步,定义一个参数来接收这个useCounterStore函数:
    1. const counterStore = useCounterStore();
    复制代码
    第三步,直接在需要的位置引入counterStore中的参数即可
    (可以是属性,也可以是方法。但是有一点要注意,就是必须要是return交出去的才可以;)
    1. 从pinia中取到的数据{{ counterStore.count }}
    复制代码
    1. <button @click="counterStore.clearCount">清空count</button>
    复制代码
    属性或者方法都可以直接使用,只要你在return中交出去了
    启动vue3项目,查看

    可以看到确实能获取到pinia中定义的数据count;
    如果想要修改count,可以直接在数值上修改:
    1. const addCount = () => {

    2. counterStore.count++;

    3. }
    复制代码
    定义一个按钮,并绑定事件:修改结果如图:

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

    但是pinia有一个不好的地方就是它默认是内存存储,你只要一刷新浏览器就会丢失数据。
    我们这时候可以借助pinia的持久化插件persist来解决;
    1、下载persist持久化插件:
    1. npm install pinia-plugin-persistedstate
    复制代码
    2、在pinia中使用persist
    1. import './assets/main.css'

    2. import { createApp } from 'vue'
    3. import { createPinia } from 'pinia'
    4. import App from './App.vue'
    5. import router from './router'
    6. // 1、pinia的持久化插件
    7. import { createPersistedState } from 'pinia-plugin-persistedstate'

    8. const app = createApp(App)

    9. //2、 接收createPersistedState函数
    10. const piniaPersistedState = createPersistedState()

    11. const pinia = createPinia()
    12. // 3、在pinia中引入持久化插件
    13. pinia.use(piniaPersistedState)

    14. app.use(pinia)
    15. app.use(router)

    16. app.mount('#app')
    复制代码
    3、在定义状态store的时候指定持久化配置参数:{persist:true}
    1. import { ref } from 'vue'
    2. import { defineStore } from 'pinia'

    3. export const useCounterStore = defineStore('counter', () => {
    4.   const count = ref(0)
    5. // 定义一个方法,直接清空count
    6. const clearCount = () => {
    7. count.value=0
    8. }

    9.   return { count,clearCount}
    10. },
    11. {persist: true}

    12. )
    复制代码
    引入了pinia的持久化插件之后,我们再刷新页面,那么piniade的store函数中的数据也就持久的保存了。
    其实这个插件底层也是使用了localstorage,将数据存储到了浏览器中。
    到此这篇关于vue3中pinia的使用及持久化的实现的文章就介绍到这了,更多相关vue3 pinia使用及持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/javascript/3395213j1.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表