关于uniapp项目中pinia的缓存问题

问题描述

我们首先来描述一下问题

我们编写了一个pinia文件,在该文件中我们的state需要通过getters中的uni.getStorageSync方法(我们假设方法名为:initItem)来获取具体数据并将数据赋予state中的变量

我们在**界面中使用uni.setStorageSync设置了缓存信息,接着我们进行了类似于退出操作使用uni.removeStorageSync操作后,我们通过uni.reLaunch返回主页

而当我们来到主页后我们调用该pinia文件的initItem方法,并输出该state中的相应变量我们会发现该数据没有被置空,仿佛我们的uni.removeStorageSync没有起到作用一样

原因

我们可以在进行remove操作的地方进行console操作以查看remove操作后是否还存在该缓存例如:

uni.removeStorageSync(‘item’);             //我们先进行删除缓存操作
const useTest=useTestStore();
useTest.initItem;        //删除缓存后,我们调用getters中的初始化方法来进行变量初始化
console.log(“看看删了没”,uni.getStorageSync(‘item’),useTest.item);         //从结果来看我们会发现结果为:”看看删了没, ,’具体数据’ “

在运行了以上代码后,我们会发现uni.removeStorageSync(‘item’)是起到了作用的,但是当我们在index界面再次调用getters中的初始化方法以及再次输出useTest.item,我们会发现该数据依然存在

我们可以发现,在进行了删除操作后,uni.getStorageSync确实没有该缓存内容了,但是当我们进行跳转页面操作,再调用初始化操作时我们发现该缓存内容似乎依然存在,那么我们就可以从getters中的initItem方法着手了,我们在该方法中也进行console.log来测试在该方法中item的数据值以及缓存值(截止以上内容我们可以合理怀疑initItem在进行删除操作后并没有再次调用)

在再一次进行运行后,我们会发现initItem确实没有在进行删除操作后再一次运行,即便我们在删除操作后就调用了initItem以及在index界面的onLoad()里也调用initItem方法,他也依然没有再次执行(具体原因未知)

解决方案

或许是getters中我们编写的方法存在某种问题,当然了,我们现在假设我们的getters中的初始化方法编写无误,那么我们可以将该方法移至actions中去(原getters方法删除),接着我们在界面中的原initItem区域改为initItem()即可,这时我们就会发现该pinia中的item变量会随着我们进行的remove/get/set 操作而发生数据变化了

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!谢谢你的提问。关于uniapp使用pinia,我可以给你一些建议。 Pinia是一个Vue.js的状态管理库,可以用来管理Vue应用的数据。在uniapp使用pinia也是比较简单的。以下是一些操作步骤: 1. 安装pinia 在uniapp项目,可以使用NPM或者Yarn安装pinia。 NPM安装命令: ``` npm install pinia --save ``` Yarn安装命令: ``` yarn add pinia ``` 2. 创建pinia实例 在uniapp的main.js文件,可以创建一个pinia实例并挂载到Vue实例。 ``` import { createPinia } from 'pinia' const app = createApp({ // ... }) const pinia = createPinia() app.use(pinia) ``` 3. 在组件使用pinia 在需要使用pinia进行状态管理的组件,可以定义一个store,并绑定到pinia实例上。 ``` import { defineStore } from 'pinia' export const useCounterStore = defineStore({ id: 'counter', state: () => ({ count: 0 }), actions: { increment() { this.count++ }, decrement() { this.count-- } } }) ``` 然后在组件使用useStore来获取store实例并进行状态管理。 ``` <template> <div> <p>{{ count }}</p> <button @click="increment">+</button> <button @click="decrement">-</button> </div> </template> <script> import { useCounterStore } from '@/store/counter' export default { setup() { const counter = useCounterStore() return { count: counter.count, increment: counter.increment, decrement: counter.decrement } } } </script> ``` 以上就是在uniapp使用pinia进行状态管理的基本操作。如果还有什么问题,请随时问我!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值