解決Vuex-在F5刷新頁面后數據不見


問題場景

頁面刷新后,想恢復刷新之前的某些數據狀態,我們總是習慣於將數據放在瀏覽器的sessionStorage和localStorage中。但是用了vue后,vuex便可以被應用了。

vuex優勢:相比sessionStorage,存儲數據更安全,sessionStorage可以在控制台被看到。

vuex劣勢:在F5刷新頁面后,vuex會重新更新state,所以,存儲的數據會丟失。

為了克服這個問題, vuex-persistedstate出現了~~

原理:

  • 將vuex的state存在localStorage或sessionStorage或cookie中一份
  • 刷新頁面的一瞬間,vuex數據消失,vuex回去sessionStorage中拿回數據,變相的實現了數據刷新不丟失~

使用方法:

  • 安裝:
    npm install vuex-persistedstate  --save
  • 在store下的index.js中,引入並配置 
    import createPersistedState from "vuex-persistedstate"
    
    const store = new Vuex.Store({
      // ...
      plugins: [createPersistedState()]
    })
  • 此時可以選擇數據存儲的位置,可以是localStorage/sessionStorage/cookie,此處以存儲到sessionStorage為例,配置如下:
    import createPersistedState from "vuex-persistedstate"
    const store = new Vuex.Store({
      // ...
      plugins: [createPersistedState({
          storage: window.sessionStorage
      })]
    })

存儲指定state:

vuex-persistedstate默認持久化所有state,指定需要持久化的state,配置如下:

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
  // ...
  plugins: [createPersistedState({
      storage: window.sessionStorage,
      reducer(val) {
          return {
          // 只儲存state中的user
          user: val.user
        }
     }
  })]

此刻的val 對應store/modules文件夾下幾個js文件存儲的內容,也就是stor/index中import的幾個模塊,可以自己打印看看。希望哪一部分的數據持久存儲,將數據的名字在此配置就可以,目前我只想持久化存儲user模塊的數據。

注意:如果此刻想配置多個選項,將plugins寫成一個一維數組,不然會報錯。

import createPersistedState from "vuex-persistedstate"
import createLogger from 'vuex/dist/logger'
// 判斷環境 vuex提示生產環境中不使用
const debug = process.env.NODE_ENV !== 'production'
const createPersisted = createPersistedState({
  storage: window.sessionStorage
})
export default new Vuex.Store({
 // ...
  plugins: debug ? [createLogger(), createPersisted] : [createPersisted]
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM