vuex數(shù)據(jù)狀態(tài)持久化問題
在VUE項目中,由于是單頁應用,vuex中的數(shù)據(jù)在頁面刷新時就會被清除,所以我們要考慮怎樣讓vuex中的數(shù)據(jù)持久保存在瀏覽器中,至少不能每次刷新時都丟失登錄狀態(tài)。
本文介紹VUE項目中常用到的兩種vuex持久化的方法,底層實現(xiàn)原理一直,方法不太一樣,可以在項目中根據(jù)實際來區(qū)分
方法一、瀏覽器監(jiān)聽+本地存儲
我們可以監(jiān)聽瀏覽器的刷新,在頁面刷新時將vuex內(nèi)的數(shù)據(jù)保存在本地存儲中(根據(jù)項目需要可以考慮保存在sessionStorage或者localStorage中)
在App.vue中,created生命周期寫我們的監(jiān)聽方法
window.addEventListener("beforeunload", () => {
sessionStorage.setItem("store", JSON.stringify(this.$store.state))
})然后在進入到created生命周期時,去到sessionStorage/localStorage中的數(shù)據(jù),將數(shù)據(jù)替換到vuex中
if(sessionStorage.getItem("store")) {
this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))
}整體來說明一下代碼
created() {
// 頁面加載時,讀取sessionStorage中的狀態(tài)信息
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))
})
},這個方法的好處是不需要借助其他三方組件庫,實現(xiàn)vuex全量數(shù)據(jù)持久化,壞處是所有數(shù)據(jù)保存在本地,會有一些較敏感數(shù)據(jù)容易被查看到,另外如果做某些指定數(shù)據(jù)持久化時會比較麻煩,所以下面介紹第二種更為簡單的方法
方法二、狀態(tài)持久化插件
推薦使用 vuex-persistedstate 插件
使用方法
如下:
1、在項目中安裝該插件
cnpm i --save vuex-persistedstate
2、在 src/store/index.js中引入該插件
import createPersistedState from 'vuex-persistedstate'
在vuex中使用
plugins: [createPersistedState()]
整體代碼
如下:
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
Vue.use(Vuex)
export default new Vuex.Store({
plugins: [createPersistedState({
storage: window.sessionStorage, // 默認位置是 localStorage
reducer: (state) => {
return {
// 默認是全部緩存,在這里可以設(shè)置需要緩存的狀態(tài)
token: state.token
}
}
})],
state: {
token: ''
},
mutations: {
},
}優(yōu)點:
1、可以更便捷設(shè)置存儲位置 為sessionStorage或者 localStorage中,默認為 localStorage
2、可以更便捷設(shè)置需要存儲的內(nèi)容,如當需要存儲token時,只需要將token放入進入即可
總結(jié)
本文插件只簡單概述了一下狀態(tài)持久化插件的用法,還有更多用法并未用到,在此并未講述,有興趣的朋友可以此插件github地址做更多了解(當然還有很多其他很好用的插件和方法,本文只提到了我自己項目中使用過的)
好了,以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue的watch和computed方法的使用及區(qū)別介紹
Vue的watch屬性可以用來監(jiān)聽data屬性中數(shù)據(jù)的變化。這篇文章主要介紹了Vue的watch和computed方法的使用及區(qū)別,需要的朋友可以參考下2018-09-09
從零開始Vue3數(shù)據(jù)交互之promise用法詳解
這篇文章主要介紹了Axios的基本使用,包括異步編程的基礎(chǔ)知識,如Promise的介紹、特點和基本用法,以及如何使用then、catch和async/await來處理異步操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-02-02

