uniapp Vue3版本使用pinia存储持久化插件pinia-plugin-persistedstate对微信小程序的配置

发布于:2025-08-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

在这里插入图片描述

需求描述

如上图所示,使用uniapp开发微信小程序商城时候,会涉及到加入到购物车模块,一般用户选择的商品加入购物车,在开发的时候可以使用pinia,将用户选择加入购物车的商品进行全局状态管理,问题在于强制刷新页面的时候,刚刚选择加入购物车的商品列表就清空了。

那么怎么解决这个问题那?

可以使用Pinia插件pinia-plugin-persistedstate可配置的 Pinia 存储持久化。

uniapp中使用pinia插件

1.在uniapp项目中使用pinia

要想使用插件的话,首先要在uniapp的main.js中导入pinia,HBuilder X 已内置了 Pinia,无需手动安装,下方是官方的示例代码:

import App from './App'
import { createSSRApp } from 'vue';
import * as Pinia from 'pinia';

export function createApp() {
	const app = createSSRApp(App);
	app.use(Pinia.createPinia());
	return {
		app,
		Pinia, // 此处必须将 Pinia 返回
	};
}

2.安装pinia-plugin-persistedstate插件

pinia-plugin-persistedstate插件地址:https://prazdevs.github.io/pinia-plugin-persistedstate/zh/

在项目根目录下使用命令行窗口安装插件

npm i pinia-plugin-persistedstate

安装完成,在main.js中导入插件,修改官方示例代码,如下所示:

import { createSSRApp } from 'vue'
import * as Pinia from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
export function createApp() {
  const app = createSSRApp(App)
  const pinia = Pinia.createPinia()
  pinia.use(piniaPluginPersistedstate)
  app.use(pinia);
  return {
    app,
	Pinia
  }
}

3.defineStore中做持久化配置

export const useCartStore = defineStore('cart', () => {	
	const goodsTotal = computed(()=>{
		...实现代码
	})	
	const priceTotal = computed(()=>{
		...实现代码
	})	
	const pushGoods = (data)=>{
		...实现代码
	}
	return {
		cartList,
		pushGoods,
		goodsTotal,
		priceTotal
	}
},{
	persist:true
});

在defineStore函数内设置一个对象参数,persist:true便可开启持久化,当cartList数据发生改变时,在浏览器控制台的Application下Local storage中,可以找到key为“cart”的数据,如下所示:
在这里插入图片描述
如上所示,在H5开发中,使用pinia的插件再刷新的时候,购物车列表中的数据将不会消失,说明已经做了持久化的存储,但是微信小程序中是没有localstorage的,仍然不能进行持久化,下面就对persist内的storage进行设置,可以修改缓存的方式。

4.在微信小程序中做持久化存储

export const useCartStore = defineStore('cart', () => {	
	const goodsTotal = computed(()=>{
		...实现代码
	})	
	const priceTotal = computed(()=>{
		...实现代码
	})	
	const pushGoods = (data)=>{
		...实现代码
	}
	return {
		cartList,
		pushGoods,
		goodsTotal,
		priceTotal
	}
},{
	persist:{
		storage:{
			getItem:uni.getStorageSync,
			setItem:uni.setStorageSync			
		}
	}
});

如上所示,修改storage的获取缓存和设置缓存的方式,在uniapp开发微信小程序中,提供了同步获取/修改缓存的API,按照如上方式的设置,在微信小程序控制台的storage中便可找到要缓存的购物车列表数据,如下图所示:
在这里插入图片描述

微信小程序可以会出现的问题

再H5中实验正常的话,在微信小程序不起作用,并且控制台会报错 TypeError: Cannot read property ‘localStorage’ of undefind

解决方法:
在这里插入图片描述
在uniapp项目中unpackage打包目录中,删除掉之前打包的mp-weixin文件,重启微信小程序项目,这样应该问题就能解决了,如果还存在问题,请在评论区留言。


网站公告

今日签到

点亮在社区的每一天
去签到