uniapp项目使用vue3 pinia数据持久化存储及修改、删除

插件市场找到相关插件可直接导入到项目中:pinia-plugin-unistorage - DCloud 插件市场

根据插件文档使用说明安装使用:

下面我来简单说一下我用到的使用方式:

我的项目中主要存储了用户token及用户信息。

import { defineStore } from "pinia";
import {reactive, ref} from 'vue'

export const useStore = defineStore("main",() => {
	
	// token
	const token = ref<string>('');
	// 用户信息
	const userInfo = reactive({});
	
    return {
		token,
		userInfo
	};
  },{
    unistorage: true, // 开启后对 state 的数据读写都将持久化
  },
);

使用数据:(vue文件引入之后即可使用)

// pinia
import { useStore } from '@/stores/counter'
const counter = useStore()

console.log(counter.token)
console.log(counter.userInfo)

修改数据:(基础数据类型可直接修改,reactive生命的对象需要使用Object.assign函数来赋值)

counter.token = '1111111111'
Object.assign(counter.userInfo,{a:1,b:2,c:3})

// 修改对象下的某个值也可以直接修改
counter.userInfo.a = 11

这里如果用户退出登录使用以下方式:token清除了,但userInfo中的数据依然存在。

counter.token = ''
Object.assign(counter.userInfo,{})

查阅到使用$reset()方法重置:但代码报错了,语法不支持

然后根据报错信息找到解决的保存:pinia 无法使用$reset()方法_pinia reset-CSDN博客

当我准备使用的时候,突然想到vue2中的vuex中的state需要在mutations或actions中修改,然后我在counter.ts中新增了一个方法:

import { defineStore } from "pinia";
import {reactive, ref} from 'vue'

export const useStore = defineStore("main",() => {
	
	// token
	const token = ref<string>('');
	// 用户信息
	const userInfo = reactive({});
	
	// 重置
	const result  = ()=>{
		token.value = ''
		for (const key in userInfo) {
		    if(userInfo.hasOwnProperty(key)) {
				delete userInfo[key];
		    }
		}
	}
	
    return {
		token,
		userInfo,
		result
	};
  },{
    unistorage: true, // 开启后对 state 的数据读写都将持久化
  },
);

直接调用完美解决!!!!!

counter.result()

`pinia-plugin-persistedstate` 是一个 Vue.jsPinia 插件,它允许你在 Vuex 库中方便地添加持久化的状态管理功能。如果你想要在 UniApp(微信小程序)中应用这种按需持久化的策略,需要注意 UniAppVue 的一些差异。 首先,UniApp 小程序本身有自己的数据管理和缓存机制,叫做 `wx.setStorage()` 和 `wx.getStorageSync()` 方法,用于在本地存储数据。然而,如果你想利用类似于 Vuex + Pinia 的结构来组织数据,并且希望将某些状态保存到本地,可以按照以下步骤操作: 1. **安装依赖**: 在 UniApp项目中,先安装 Vue.js 或者 Vue3 的运行时库,然后安装 `pinia` 和 `pinia-plugin-persistedstate`。例如,通过 npm 安装: ``` npm install vue@next pinia @vue/pinia @vue/plugin-persistedstate ``` 2. **创建 Pinia store**: 创建一个 Pinia store 并配置 `persistedState`,指定哪些状态需要持久化。示例代码: ```javascript import { createStore } from &#39;@vue/pinia&#39; import { persistedState } from &#39;@vue/plugin-persistedstate&#39; const myStore = createStore({ id: &#39;my-store&#39;, plugins: [persistedState()], state() { return { // 需要持久化的状态 myImportantData: null, // 不需要持久化的其他状态... } }, actions: {}, mutations: {} }) ``` 3. **初始化 store**: 在小程序生命周期钩子(如 app.json 的 launchPage 中)中初始化 store: ```javascript onLaunch(options) { myStore.$onCreate(() => { // 初始化从本地存储加载的状态 myStore.myImportantData = wx.getStorageSync(&#39;myImportantData&#39;) || initialValue }) // 渲染页面前检查并设置状态 myStore.$onBeforeMount(() => { // 如果存在本地数据,更新 store if (myImportantDataFromLocalStorage) { myStore.commit(&#39;setMyImportantData&#39;, myImportantDataFromLocalStorage) } }) } ``` 4. **保存数据**: 当你需要将数据保存到本地时,在合适的 action/mutations 中调用 `commit(&#39;saveMyImportantData&#39;, myImportantData)`,之后可以调用 `wx.setStorageSync` 来持久化数据。 5. **清除数据**: 当不需要某个状态时,可以在组件卸载或者特定场景下调用 `myStore.dispatch(&#39;clearMyImportantData&#39;)`,然后在相应的 action 中删除清空本地存储
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值