【uni-app】Pinia 持久化

小程序端 Pinia 持久化

说明:Pinia 用法与 Vue3 项目完全一致,uni-app 项目仅需解决持久化插件兼容性问题。

持久化存储插件

安装持久化存储插件: pinia-plugin-persistedstate

复制代码
pnpm i pinia-plugin-persistedstate

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API。

基本用法

ts 复制代码
import { defineStore } from 'pinia'
import { ref } from 'vue'
​
// 定义 Store
export const useMemberStore = defineStore(
  'member',
  () => {
    // 会员信息
    const profile = ref<any>()
​
    // 保存会员信息,登录时使用
    const setProfile = (val: any) => {
      profile.value = val
    }
​
    // 清理会员信息,退出时使用
    const clearProfile = () => {
      profile.value = undefined
    }
​
    // 记得 return
    return {
      profile,
      setProfile,
      clearProfile,
    }
  },
  // TODO: 持久化
  {
    // 网页端的配置
    // persist: true,
    // 小程序端的配置
    persist: {
      storage: {
        getItem: (key: string) => uni.getStorageSync(key),
        setItem: (key: string, value: string) => uni.setStorageSync(key, value)
      },
    },
  },
)
复制代码
// src/stores/index.ts
import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'
​
// 创建 pinia 实例
const pinia = createPinia()
// 使用持久化存储插件
pinia.use(persist)
​
// 默认导出,给 main.ts 使用
export default pinia
​
// 模块统一导出
export * from './modules/member'

// main.ts
import { createSSRApp } from 'vue'
import pinia from './stores'
​
import App from './App.vue'
export function createApp() {
  const app = createSSRApp(App)
​
  app.use(pinia)
  return {
    app,
  }
}

多端兼容

网页端持久化 API

复制代码
// 网页端API
localStorage.setItem()
localStorage.getItem()

多端持久化 API

复制代码
// 兼容多端API
uni.setStorageSync()
uni.getStorageSync()

原理

可以看到 persist 默认接收一个 boolean。表示是否开启持久化,而且默认持久化网页端。

此时我们是小程序端,就需要在 storage 中进行配置持久化的地方。

这里接收两个配置项 getItem 和 setItem,代表持久化的 setter 和 getter。

Configuration | pinia-plugin-persistedstate (prazdevs.github.io)

相关推荐
alphaair14 分钟前
【一步步开发AI运动APP】十、微调优化内置运动分析器,灵活适配不同的应用场景
uni-app·ai运动·ai运动识别·ai健身·ai体测·ai运动app·ai运动检测·工会云上运动会·ai人体检测·ai姿态识别
江城开朗的豌豆21 分钟前
JavaScript篇:字母侦探:如何快速统计字符串里谁才是'主角'?
前端·javascript·面试
moxiaoran57532 小时前
uni-app学习笔记二十三--交互反馈showToast用法
笔记·学习·uni-app
coding随想9 小时前
JavaScript ES6 解构:优雅提取数据的艺术
前端·javascript·es6
小小小小宇9 小时前
一个小小的柯里化函数
前端
灵感__idea9 小时前
JavaScript高级程序设计(第5版):无处不在的集合
前端·javascript·程序员
小小小小宇9 小时前
前端双Token机制无感刷新
前端
小小小小宇9 小时前
重提React闭包陷阱
前端
小小小小宇9 小时前
前端XSS和CSRF以及CSP
前端
UFIT9 小时前
NoSQL之redis哨兵
java·前端·算法