解決vuex刷新頁面數(shù)據(jù)丟失

1、前言

vue構(gòu)建的項(xiàng)目中,vuex的狀態(tài)存儲(chǔ)是響應(yīng)式的,當(dāng)vue組件從store中讀取狀態(tài)的時(shí)候,若store中的狀態(tài)發(fā)生變化,那么相應(yīng)的組件也會(huì)得到高效刷新,問題來了,vuex存儲(chǔ)的數(shù)據(jù)只是在頁面中,相當(dāng)于我們定義的全局變量,刷新之后,里面的數(shù)據(jù)就會(huì)恢復(fù)到初始化的狀態(tài)。比如,用戶已經(jīng)登錄了,我把登錄狀態(tài)放到state中了,一刷新頁面,還要重新登錄?購物車?yán)锏奶砑拥臄?shù)據(jù),一刷新要重新添加?

2、使用場景

image

vuex存取值一般都是放在computed計(jì)算屬性中,但是一刷新頁面的數(shù)據(jù)就沒了

3、思路

監(jiān)聽頁面是否刷新,如果頁面刷新了,將state對象存入到sessionStorage/localStorage中。頁面打開之后,判斷sessionStorage/localStorage中是否存在state對象,如果存在,則說明頁面是被刷新過的,將sessionStorage/localStorage中存的數(shù)據(jù)取出來給vuex中的state賦值。如果不存在,說明是第一次打開,則取vuex中定義的state初始值。

4、代碼實(shí)現(xiàn)

    //全局監(jiān)聽,頁面刷新的時(shí)候?qū)tore里state的值存到sessionStorage中,然后從sessionStorage中獲取,再賦值給store。然后再把session里面存的刪除即可,相當(dāng)于中間件的作用。
 //在頁面加載時(shí)讀取sessionStorage里的狀態(tài)信息
    if (sessionStorage.getItem("store")) {
      this.$store.replaceState(
        Object.assign(
          {},
          this.$store.state,
          JSON.parse(sessionStorage.getItem("store"))
        )
      );
      sessionStorage.removeItem("store")
    }

    //在頁面刷新時(shí)將vuex里的信息保存到sessionStorage里
    window.addEventListener("beforeunload", () => {
      sessionStorage.setItem("store", JSON.stringify(this.$store.state));
    });

5、插件實(shí)現(xiàn)

vuex持久化 vuex-persistedstate

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容