首頁 > 軟體

VueX瀏覽器重新整理如何實現儲存資料

2022-07-27 18:00:55

VueX瀏覽器重新整理儲存資料

在vue專案中用vuex來做全域性的狀態管理, 發現當重新整理網頁後,儲存在vuex範例store裡的資料會丟失。

原因:

因為當頁面重新整理時,頁面會重新載入vue範例,store裡面的資料就會被重新賦值初始化

方法一

在 App.vue 的 created 勾點函數裡寫下了如下程式碼;

//在頁面載入時讀取localStorage裡的狀態資訊
    localStorage.getItem("userMsg") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("userMsg"))));
    
    //在頁面重新整理時將vuex裡的資訊儲存到localStorage裡
    window.addEventListener("beforeunload",()=>{
        localStorage.setItem("userMsg",JSON.stringify(this.$store.state))
    })

方法二

router/router.js 下

setItem()

重新整理getItem()

重新整理瀏覽器後,Vuex的資料丟失,如何解決?

在vue專案中用vuex來做全域性的狀態管理, 發現當重新整理網頁後,儲存在vuex範例store裡的資料會丟失。

因為 store 裡的資料是儲存在執行記憶體中的,當頁面重新整理時,頁面會重新載入vue範例,store裡面的資料就會被重新賦值初始化。

解決方法

使用vuex-along

vuex-along 的實質是將 vuex 中的資料存放到 localStorage 或者 sessionStroage 中。

安裝vuex-along

npm install vuex-along --save

設定 vuex-along: 在 store/index.js 中最後新增以下程式碼:

import VueXAlong from 'vuex-along' //匯入外掛
export default new Vuex.Store({
    //modules: {
        //controler  //模組化vuex
    //},
    plugins: [VueXAlong({
        name: 'store',     //存放在localStroage或者sessionStroage 中的名字
        local: false,      //是否存放在local中  false 不存放 如果存放按照下面session的設定
        session: { list: [], isFilter: true } //如果值不為false 那麼可以傳遞物件 其中 當isFilter設定為true時, list 陣列中的值就會被過濾調,這些值不會存放在seesion或者local中
    })]
});

使用localStorage 或者 sessionStroage

created() {
    //在頁面載入時讀取sessionStorage裡的狀態資訊
    if (sessionStorage.getItem("store")) {
      this.$store.replaceState(
        Object.assign(
          {},
          this.$store.state,
          JSON.parse(sessionStorage.getItem("store"))
        )
      );
    }
    //在頁面重新整理時將vuex裡的資訊儲存到sessionStorage裡
    window.addEventListener("beforeunload", () => {
      sessionStorage.setItem("store", JSON.stringify(this.$store.state));
    });
},

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com