vuex數(shù)據(jù)狀態(tài)持久化問(wèn)題
在VUE項(xiàng)目中,由于是單頁(yè)應(yīng)用,vuex中的數(shù)據(jù)在頁(yè)面刷新時(shí)就會(huì)被清除,所以我們要考慮怎樣讓vuex中的數(shù)據(jù)持久保存在瀏覽器中,至少不能每次刷新時(shí)都丟失登錄狀態(tài)。
本文介紹VUE項(xiàng)目中常用到的兩種vuex持久化的方法,底層實(shí)現(xiàn)原理一直,方法不太一樣,可以在項(xiàng)目中根據(jù)實(shí)際來(lái)區(qū)分
方法一、瀏覽器監(jiān)聽(tīng)+本地存儲(chǔ)
我們可以監(jiān)聽(tīng)瀏覽器的刷新,在頁(yè)面刷新時(shí)將vuex內(nèi)的數(shù)據(jù)保存在本地存儲(chǔ)中(根據(jù)項(xiàng)目需要可以考慮保存在sessionStorage或者localStorage中)
在App.vue中,created生命周期寫(xiě)我們的監(jiān)聽(tīng)方法
window.addEventListener("beforeunload", () => {
sessionStorage.setItem("store", JSON.stringify(this.$store.state))
})然后在進(jìn)入到created生命周期時(shí),去到sessionStorage/localStorage中的數(shù)據(jù),將數(shù)據(jù)替換到vuex中
if(sessionStorage.getItem("store")) {
this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))
}整體來(lái)說(shuō)明一下代碼
created() {
// 頁(yè)面加載時(shí),讀取sessionStorage中的狀態(tài)信息
if(sessionStorage.getItem("store")) {
this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))
}
// 在頁(yè)面刷新時(shí),將vuex中的信息保存到sessionStorage里
window.addEventListener("beforeunload", () => {
sessionStorage.setItem("store", JSON.stringify(this.$store.state))
})
},這個(gè)方法的好處是不需要借助其他三方組件庫(kù),實(shí)現(xiàn)vuex全量數(shù)據(jù)持久化,壞處是所有數(shù)據(jù)保存在本地,會(huì)有一些較敏感數(shù)據(jù)容易被查看到,另外如果做某些指定數(shù)據(jù)持久化時(shí)會(huì)比較麻煩,所以下面介紹第二種更為簡(jiǎn)單的方法
方法二、狀態(tài)持久化插件
推薦使用 vuex-persistedstate 插件
使用方法
如下:
1、在項(xiàng)目中安裝該插件
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, // 默認(rèn)位置是 localStorage
reducer: (state) => {
return {
// 默認(rèn)是全部緩存,在這里可以設(shè)置需要緩存的狀態(tài)
token: state.token
}
}
})],
state: {
token: ''
},
mutations: {
},
}優(yōu)點(diǎn):
1、可以更便捷設(shè)置存儲(chǔ)位置 為sessionStorage或者 localStorage中,默認(rèn)為 localStorage
2、可以更便捷設(shè)置需要存儲(chǔ)的內(nèi)容,如當(dāng)需要存儲(chǔ)token時(shí),只需要將token放入進(jìn)入即可
總結(jié)
本文插件只簡(jiǎn)單概述了一下?tīng)顟B(tài)持久化插件的用法,還有更多用法并未用到,在此并未講述,有興趣的朋友可以此插件github地址做更多了解(當(dāng)然還有很多其他很好用的插件和方法,本文只提到了我自己項(xiàng)目中使用過(guò)的)
好了,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用vue + koa2 + mockjs模擬數(shù)據(jù)的方法教程
這篇文章主要給大家介紹了關(guān)于利用vue + koa2 + mockjs模擬數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
Vue組件中常見(jiàn)的props默認(rèn)值陷阱問(wèn)題
這篇文章主要介紹了避免Vue組件中常見(jiàn)的props默認(rèn)值陷阱,本文通過(guò)問(wèn)題展示及解決方案給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
基于vue-draggable 實(shí)現(xiàn)三級(jí)拖動(dòng)排序效果
這篇文章主要介紹了基于vue-draggable 實(shí)現(xiàn)三級(jí)拖動(dòng)排序效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Vue實(shí)現(xiàn)動(dòng)態(tài)顯示表單項(xiàng)填寫(xiě)進(jìn)度功能
這篇文章主要介紹了Vue實(shí)現(xiàn)動(dòng)態(tài)顯示表單項(xiàng)填寫(xiě)進(jìn)度功能,此功能可以幫助用戶了解表單填寫(xiě)的進(jìn)度和當(dāng)前狀態(tài),提高用戶體驗(yàn),通常實(shí)現(xiàn)的方式是在表單中添加進(jìn)度條,根據(jù)用戶填寫(xiě)狀態(tài)動(dòng)態(tài)更新進(jìn)度條,感興趣的同學(xué)可以參考下文2023-05-05
vue實(shí)現(xiàn)在線預(yù)覽pdf文件和下載(pdf.js)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)在線預(yù)覽pdf文件和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11

