解决 mpvue 经典 bug:同路由切换时,上次的数据会保留

关注前端小讴,阅读更多原创技术文章

由于一直在用vue技术栈,因此初次开发小程序尝试使用【mpvue】。尽管听闻框架已停止维护,为了上手迅速,不顾可能存在的众多bug,毅然用起来。

果不其然,一个大bug出现了:[同一路由切换时,上一次的页面数据会保留]
项目实战bug:mpvue重构cnode社区
在这里插入图片描述

github用户已在mpvue的issues给出相关原因:
(https://github.com/Meituan-Dianping/mpvue/issues/140)

参考众多答案后,用“建页面栈”的办法得以解决

const dataStack = []; // 建一个页面栈

export default {
  data () {
    return {...};
  },
  onLoad () {
    dataStack.push({ ...this.$data }); // 备份数据
    // 其他初始化....一定要先备份,再做其他初始化
  },
  onUnload () {
    Object.assign(this.$data, dataStack.pop()); // 恢复数据
  }
}

由于 vue 的 mixin 中的代码先于页面执行,因此上述方法可优化到 mixin.js 文件中

let mixin = {
  data() {
    return {
      dataStack: [], // 解决mpvue相同组件数据不更新问题,建立栈堆
    };
  },
  onUnload() {
    Object.assign(this.$data, this.dataStack.pop()); // 恢复
  },
  onLoad() {
    this.dataStack.push({ ...JSON.parse(JSON.stringify(this.$data)) }); // 备份
  },
};
export default mixin;

bug得以解决:
在这里插入图片描述

功能和项目完整代码参见simon-cnode(mpvue重构cnode社区),欢迎star!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值