博客 / 詳情

返回

解決 mpvue 經典 bug:同路由切換時,上次的數據會保留

關注前端小謳,閲讀更多原創技術文章

由於一直在用vue技術棧,因此初次開發小程序嘗試使用【mpvue】。儘管聽聞框架已停止維護,為了上手迅速,不顧可能存在的眾多bug,毅然用起來。

果不其然,一個大bug出現了:同一路由切換時,上一次的頁面數據會保留

項目實戰bug:mpvue重構cnode社區
image

github用户已在mpvue的issues給出相關原因:
image

參考眾多答案後,用“建頁面棧”的辦法得以解決

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得以解決:
image

功能和項目完整代碼參見simon-cnode(mpvue重構cnode社區),歡迎star!

user avatar laughingzhu 頭像 xiangjiaochihuanggua 頭像 columsys 頭像 yilezhiming 頭像 lesini 頭像 iymxpc3k 頭像 b_a_r_a_n 頭像 nihaojob 頭像 yiiouo 頭像 codeoop 頭像 xuriliang 頭像 heptagon 頭像
45 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.