在vuex中使用了vuex-persistedstate持久化插件 为什么页面刷新 非标准属性丢失

let size = 0; this.deid.forEach((item) => { const num = parseFloat(item.size); if (!isNaN(num)) { // 判断是否为数字 size += num; } }); this.deid.size = size; this.deid.timestamp = new Date().getTime(); // console.log(this.deid, "2"); this.$store.commit("DOLOAD_REDING", this.deid); this.recordList = this.$store.state.Download;

由于使用了 vuex-persistedstate 插件,它会自动将 this.$store.state 中的数据保存到本地存储中(默认是使用 localStorage),在页面刷新时也会自动从本地存储中读取这些数据并同步到 this.$store.state 中。但是,该插件只能保存原始类型(Primitive)和普通对象(Plain object),而不能直接保存非标准属性。

在上面的代码中,this.deid 实际上是一个数组类型的对象,它的 sizetimestamp 属性都是直接添加到该对象上的非标准属性。当你执行 this.deid.size = sizethis.deid.timestamp = new Date().getTime() 的时候,实际上是给该数组对象添加了 sizetimestamp 两个非标准属性。而当你将该数组对象传给 Vuex 的 mutation 方法时,vuex-persistedstate 插件会将该对象转换为一个字符串并保存到本地存储中。由于数组对象并没有 sizetimestamp 两个标准属性,所以这些非标准属性就会丢失。

为了解决这个问题,你可以创建一个新的纯对象,将 this.deid 数组作为该对象的一个属性进行保存,并将 sizetimestamp 属性作为该对象的标准属性进行保存。例如:

 

javascript复制代码

let size = 0; const deidObj = { data: this.deid, // 将原始数组保存为纯对象的某个属性 size: size, timestamp: new Date().getTime() }; this.deid.forEach((item) => { const num = parseFloat(item.size); if (!isNaN(num)) { // 判断是否为数字 size += num; } }); deidObj.size = size; // console.log(deidObj, "2"); this.$store.commit("DOLOAD_REDING", deidObj); this.recordList = this.$store.state.Download;

上述代码中,我们将 this.deid 数组作为 deidObj 对象的一个属性 data 进行保存,并将 sizetimestamp 属性作为 deidObj 对象的标准属性进行保存。这样,在页面刷新时,vuex-persistedstate 插件就能正确地保存和读取该对象了。

需要注意的是,当你从 vuex-persistedstate 中读取数据时,得到的实际上是一个包含 datasizetimestamp 属性的纯对象。如果你需要使用 this.deid 数组,可以直接从该纯对象中取出 data 属性,例如:

 

javascript复制代码

const persistedData = JSON.parse(localStorage.getItem("vuex")); if (persistedData) { const deidObj = persistedData.doloadReading; if (deidObj && Array.isArray(deidObj.data)) { this.deid = deidObj.data; // TODO: 后续处理 ... } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

转角处的汤姆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值