vuex結(jié)合session存儲數(shù)據(jù)解決頁面刷新數(shù)據(jù)丟失問題
前言
在項目中表單篩選項里,選擇完之后刷新頁面數(shù)據(jù)就變了,沒有保留在自己選擇的選項上。
在項目中是使用vuex保存數(shù)據(jù),但是網(wǎng)頁刷新后,store中保存的數(shù)據(jù)丟失了。

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、原因:
vuex作為全局的數(shù)據(jù)狀態(tài)管理機制,store中的數(shù)據(jù)是保存在運行內(nèi)存中,當頁面刷新時,頁面會重新加載vue實例,store里邊的數(shù)據(jù)就會被重新賦值變成初始化狀態(tài)。
二、解決思路:
將vuex與本地存儲結(jié)合使用,頁面刷新數(shù)據(jù)不會丟失
1.本地存儲方法:
1、localStorage:永久式存儲,關(guān)閉頁面或瀏覽器之后localStorage存儲的數(shù)據(jù)不會消失。除非主動刪除數(shù)據(jù),否則永遠不會消失。
以Chrome瀏覽器為例,數(shù)據(jù)放在C:\Users\你的計算機名\AppData\Local\Google\Chrome\User Data\Default\Local Storage\leveldb
2、sessionStorage:僅在當前會話下有效,關(guān)閉當前頁面或瀏覽器數(shù)據(jù)就會被銷毀。sessionStorage實在同源的窗口中始終存在是數(shù)據(jù),頁面刷新還在,只要關(guān)閉當前頁面就銷毀了。
3、cookie:如果不在瀏覽器中設(shè)置過期時間,cookie被保存在內(nèi)存中,生命周期隨瀏覽器的關(guān)閉而結(jié)束,這種cookie簡稱會話cookie。如果在瀏覽器中設(shè)置了cookie的過期時間,cookie被保存在硬盤中,關(guān)閉瀏覽器后,cookie數(shù)據(jù)仍然存在,直到過期時間結(jié)束才消失。。cookie存放數(shù)據(jù)大小為4kb左右,一般不能超過20個,不能存儲大數(shù)據(jù)。
拓展:cookie適用場景
(1)判斷用戶是否登陸過網(wǎng)站,以便下次登錄時能夠?qū)崿F(xiàn)自動登錄(或者記住密碼)。如果我們刪除cookie,則每次登錄必須從新填寫登錄的相關(guān)信息。
(2)保存上次登錄的時間等信息。
(3)保存上次查看的頁面(保存訪問過的路由信息)
(4)瀏覽器行為跟蹤(如跟蹤分析用戶行為等)
(5)個性化設(shè)置(如用戶自定義設(shè)置,主題等)
2.實現(xiàn)步驟:
由于vue是單頁面應(yīng)用,操作都是在一個頁面完成,而且此項目只在當前打開項目中使用,所以用sessionStorage比較合適
- 將數(shù)據(jù)保存在state中,state數(shù)據(jù)通過mutation方法進行修改,mutation修改state的時候同時將數(shù)據(jù)保存在sessionStorage中。
- 在項目打開時,在App.vue中初始化數(shù)據(jù),如果本地存儲有數(shù)據(jù),那么就調(diào)用actions中的方法給state賦值。
- 在表單項進行選擇時,同時修改state中的數(shù)據(jù)。
//store/selectData.js
const state = {//state中存放數(shù)據(jù)
dataList: {
exchangeIdSum: null,
}
}
const mutations = {
setExchangeIdSum(state, data) {//將選中的數(shù)據(jù)重新賦值,并保存到sessionStorage中
state.dataList.exchangeIdSum = data
sessionStorage.setItem('dataList',JSON.stringify(state.dataList))
}
setDataList(state, data) {
state.dataList = JSON.parse(JSON.stringify(data))
}
}
const actions = {
resetDataList: ({commit}, list) =>{
setTimeout(() => {
commit('setDataList', list)
}, 2000);
}
}
export default {
state,
mutations,
actions,
}
//表單篩選頁面中操作
methods: {
exchangeChange(val) {//下拉框選擇時修改state中數(shù)據(jù)
this.$store.commit('selectData/setExchangeIdSum', val)
},
}
//App.vue中
created(){//頁面一進入判斷sessionStorage中是否有數(shù)據(jù)
sessionStorage.getItem('dataList')?
this.$store.dispatch('selectData/resetDataList', JSON.parse(sessionStorage.getItem('dataList'))):{}
}
3.優(yōu)化:
由于之前修改state數(shù)據(jù)時,mutation每次修改時都要修改sessionStorage,但如果修改的state數(shù)據(jù)很多,那每次都會修改sessionStorage,此操作略顯麻煩

解決:
① 可以將數(shù)據(jù)直接存到sessionStorage中
② vue在每次刷新時頁面都會丟失,可以在頁面刷新前將數(shù)據(jù)存放在sessionStorage中,beforeunload事件可以在頁面刷新前觸發(fā)
到此這篇關(guān)于vuex結(jié)合session存儲數(shù)據(jù)解決頁面刷新數(shù)據(jù)丟失問題的文章就介紹到這了,更多相關(guān)vuex session存儲數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ant?design?vue?pro?支持多頁簽?zāi)J絾栴}
這篇文章主要介紹了ant?design?vue?pro?支持多頁簽?zāi)J絾栴},具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Element Table 自適應(yīng)高度的實現(xiàn)示例
el-table的高度不能適應(yīng)不同電腦的分辨率,也不能跟隨瀏覽器的高度變化而變化的問題,本文就來解決一下Element Table 自適應(yīng)高度,感興趣的可以了解一下2024-07-07
Vue在頁面右上角實現(xiàn)可懸浮/隱藏的系統(tǒng)菜單
這篇文章主要介紹了Vue在頁面右上角實現(xiàn)可懸浮/隱藏的系統(tǒng)菜單,實現(xiàn)思路大概是通過props將showCancel這個Boolean值傳遞到子組件,對父子組件分別綁定事件,來控制這個系統(tǒng)菜單的顯示狀態(tài)。需要的朋友可以參考下2018-05-05
對vue v-if v-else-if v-else 的簡單使用詳解
今天小編就為大家分享一篇對vue v-if v-else-if v-else 的簡單使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
Vue.js組件使用props傳遞數(shù)據(jù)的方法
這篇文章主要為大家詳細介紹了Vue.js組件使用props傳遞數(shù)據(jù)的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10

