首页 > 其他分享 >Nuxt3-pinia环境下实现数据持久化

Nuxt3-pinia环境下实现数据持久化

时间:2024-03-05 18:23:37浏览次数:16  
标签:const Nuxt3 default defineStore pinia 持久 store nuxt

Nuxt3-pinia环境下实现数据持久化

1、安装

yarn add pinia @pinia/nuxt

然后进行配置,修改nuxt.config.ts

export default defineNuxtConfig({
  devtools: { enabled: false },
  typescript: {
    shim: false
  },
  modules: [
    '@pinia/nuxt',  // +
    '@pinia-plugin-persistedstate/nuxt', // +
  ],
  pinia: {
    autoImports: [
      'defineStore' // import { defineStore } from 'pinia'  // + 自动引入defineStore 
    ]
  }
})

2、新建目录composables,新建文件store.ts

export const useMockStore = defineStore('nuxtStore', () => {
    const mock = ref(0)
    const setMock = (num: number) => {
        mock.value = num
    }
    return {
        mock,
        setMock
    }
})

// useMockStore、setMock、mock 名称自定义

 

 3、页面内使用

<template>
    <div>
        21211 {{ foo}}
        store: {{ store.mock }}
        <button @click="store.setMock(99999)">按钮</button>
    </div>
</template>
<!-- <script lang="ts">
export default {
    layout: 'default'
}
</script> -->
<script lang="ts" setup>
    /* layout */
    // definePageMeta({ layout: 'default' })
    /* interface */
    /* props */
    /* emit */
    /* store */
    const store = useMockStore()
    /* data */
    const route = useRoute()
    const foo = useFoo()
    console.log(route, foo, 'route')
    /* fn */
</script>

 

 

 4、使用pinia插件实现持久化 sessionStorage、localStorage

安装持久化插件:

yarn add @pinia-plugin-persistedstate/nuxt

 

1)、第一种,nuxt.config.ts 中配置持久化

//nuxt.config.ts
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  devtools: { enabled: false },
  typescript: {
    shim: false
  },
  modules: [
    '@pinia/nuxt',
    '@pinia-plugin-persistedstate/nuxt',
  ],
  pinia: {
    autoImports: [
      'defineStore' // import { defineStore } from 'pinia'
    ]
  },
  piniaPersistedstate: {
    storage: 'sessionStorage' // + 持久化
  }
})

新建 composables -> plugin.ts 文件

export const usePluginStateStore = defineStore('pluginStore', () => {
    const pState = ref(0)

    const setPState = () => {
        pState.value += 1
    }

    return {
        pState,
        setPState
    }
}, {
    persist: true // + 添加此处持久化
 })
// , {
//     persist: persistedState.sessionStorage
// }

页面内使用

<template>
    <div>
        21211 {{ foo}}
        <div>
            store: {{ store.mock }}
            <button @click="store.setMock(99999)">按钮</button>
        </div>
        <div>
            pStore: {{pStore.pState}}
            <button @click="pStore.setPState">按钮</button>
        </div>
    </div>
</template>
<!-- <script lang="ts">
export default {
    layout: 'default'
}
</script> -->
<script lang="ts" setup>
    /* layout */
    // definePageMeta({ layout: 'default' })
    /* interface */
    /* props */
    /* emit */
    /* store */
    const store = useMockStore()
    const pStore = usePluginStateStore() // 持久化使用
    /* data */
    const route = useRoute()
    const foo = useFoo()
    console.log(route, foo, 'route')
    /* fn */
</script>

 2)、第二种,store 内设置

nuxt.config.ts 内配置

// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  devtools: { enabled: false },
  typescript: {
    shim: false
  },
  modules: [
    '@pinia/nuxt',
    '@pinia-plugin-persistedstate/nuxt',
  ],
  pinia: {
    autoImports: [
      'defineStore' // import { defineStore } from 'pinia'
    ]
  },
  // piniaPersistedstate: {
  //   storage: 'sessionStorage' // 持久化
  // }
})

新建 composables -> plugin.ts 文件

export const usePluginStateStore = defineStore('pluginStore', () => {
    const pState = ref(0)

    const setPState = () => {
        pState.value += 1
    }

    return {
        pState,
        setPState
    }
}, {
    // 注意:persist定义要做判断,因为localStorage/sessionStorage是客户端参数,所以需要加process.client
    persist: process.client && {
        storage: sessionStorage
    }
})

 

3)、第三种 更改 cookie

配置 nuxt.config.ts

// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  devtools: { enabled: false },
  typescript: {
    shim: false
  },
  modules: [
    '@pinia/nuxt',
    '@pinia-plugin-persistedstate/nuxt',
  ],
  pinia: {
    autoImports: [
      'defineStore' // import { defineStore } from 'pinia'
    ]
  },
  // piniaPersistedstate: {
  //   storage: 'sessionStorage' // 持久化
  // }
})

新建 composables -> plugin.ts 文件

export const usePluginStateStore = defineStore('pluginStore', () => {
    const pState = ref(0)

    const setPState = () => {
        pState.value += 1
    }

    return {
        pState,
        setPState
    }
}, {
    // 注意:persist定义要做判断,因为localStorage/sessionStorage是客户端参数,所以需要加process.client
    persist: '任意值' // 直接设置字符串可直接变更 cookie的值
})

页面内使用

<template>
    <div>
        21211 {{ foo}}
        <div>
            store: {{ store.mock }}
            <button @click="store.setMock(99999)">按钮</button>
        </div>
        <div>
            pStore: {{pStore.pState}}
            <button @click="pStore.setPState">按钮</button>
        </div>
    </div>
</template>
<!-- <script lang="ts">
export default {
    layout: 'default'
}
</script> -->
<script lang="ts" setup>
    /* layout */
    // definePageMeta({ layout: 'default' })
    /* interface */
    /* props */
    /* emit */
    /* store */
    const store = useMockStore()
    const pStore = usePluginStateStore() // 持久化使用
    /* data */
    const route = useRoute()
    const foo = useFoo()
    console.log(route, foo, 'route')
    /* fn */
</script>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://mmall.preview.selleroa.com/couponProList?type=1&coupon_id=1706004850344ua5xx8vu

标签:const,Nuxt3,default,defineStore,pinia,持久,store,nuxt
From: https://www.cnblogs.com/WebMadman/p/18054609

相关文章

  • Docker数据持久化挂载与卷(三)
    前言前面学了Docker基本的使用和通信,但是由于容器的生命周期是短暂的,当容器被删除后,容器内的数据也会一并删除。为了保存数据,我们可以使用DockerVolume将数据存储在宿主机上,从而实现数据的持久化。一、数据修改一般来看配置、数据等重要数据都需要变动,所以数据修改也......
  • 详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia)
    详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia):https://blog.csdn.net/qq_44423029/article/details/126378199?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170891147716800185818285%2522%252C%2522scm%2522%253A%252220140713.130102334..%2......
  • Nuxt3 -layout 使用
    Nuxt3-layout使用更多方式查看官网:https://57code.gitee.io/nuxt3-docs-zh/directory-structure/layouts.html1、创建default.vue文件,layout->default.vue 2、app.vue文件内添加layout布局 NuxtLayout 3、页面内使用布局两种方式引入:  ......
  • 【HarmonyOS】如何实现数据持久化不会被应用卸载而清除
    【关键字】数据持久化,AssetStoreKit 【问题】最近在学习HarmonyOSpreivewer,遇到了一个场景,跟大家分享一下。核心的需求是需要做一个数据持久化的能力,但是将数据缓存在应用沙箱的files目录下后,每次重启应用确实能够查到存储的数据,一旦将应用卸载重装,或者清除应用数据后,就......
  • scrapy——基于管道持久化存储
    笔记-基于管道:-编码流程-数据解析-在item类中定义相关的属性-将解析的数据封装到item对象中-将item类型的对象提交给管道进行持久化存储-在管道类的process_item中要将其接收到的item对象中存储的数据进行持久化存储......
  • scrapy——终端持久化存储
    笔记-基于终端指令:-要求:只可以将parse方法的返回值存储到本地的文本文件中scrapycrawldou-o./douban.csv-注意:持久化存储的类型只可以是'json','jsonlines','jsonl','jl','csv','xml','marshal','pickle'这些......
  • Pinia
    Pinia一、搭建pinia环境1.安装pinianpmipinia2.在main.ts配置piniaimport'./assets/main.css'import{createApp}from'vue'importAppfrom'./App.vue'//第一步引入piniaimport{createPinia}from'pinia';constapp=createA......
  • Pinia报错需要重新创建
    问题vue3项目,在main.js中已经引入pinia,并且成功创建在单独的js文件中想使用pinia,引入storeimport{useInfo}from'@store/info'但是报错提示getActivePiniawascalledwithnoactivePinia.Didyouforgettoinstallpinia? 解决1.需要额外创建一个store.js文件,用来......
  • 三分钟数据持久化:Spring Boot, JPA 与 SQLite 的完美融合
    三分钟,迎接一个更加高效和简便的开发体验。在快节奏的软件开发领域,每一个简化工作流程的机会都不容错过。想要一个无需繁琐配置、能够迅速启动的数据持久化方案吗?这篇文章将是你的首选攻略。在这里,我们将向你展示如何将SpringBoot的便捷性、JPA的强大查询能力和SQLite的......
  • Pinia 简单使用
    更新记录更新记录2024年2月28日初始化。Pinia是什么状态管理包,允许跨组件/页面共享状态。Pinia和Vuex对比最大最大的区别,Pinia没有mutations概念,这个东西真的很恶心。从ExtJS转过来,看Pinia不要太爽,和ExtJS的Store的概念简直一模一样。安装包npminstallpinia......