vuex結合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與本地存儲結合使用,頁面刷新數(shù)據(jù)不會丟失
1.本地存儲方法:
1、localStorage:永久式存儲,關閉頁面或瀏覽器之后localStorage存儲的數(shù)據(jù)不會消失。除非主動刪除數(shù)據(jù),否則永遠不會消失。
以Chrome瀏覽器為例,數(shù)據(jù)放在C:\Users\你的計算機名\AppData\Local\Google\Chrome\User Data\Default\Local Storage\leveldb
2、sessionStorage:僅在當前會話下有效,關閉當前頁面或瀏覽器數(shù)據(jù)就會被銷毀。sessionStorage實在同源的窗口中始終存在是數(shù)據(jù),頁面刷新還在,只要關閉當前頁面就銷毀了。
3、cookie:如果不在瀏覽器中設置過期時間,cookie被保存在內(nèi)存中,生命周期隨瀏覽器的關閉而結束,這種cookie簡稱會話cookie。如果在瀏覽器中設置了cookie的過期時間,cookie被保存在硬盤中,關閉瀏覽器后,cookie數(shù)據(jù)仍然存在,直到過期時間結束才消失。。cookie存放數(shù)據(jù)大小為4kb左右,一般不能超過20個,不能存儲大數(shù)據(jù)。
拓展:cookie適用場景
(1)判斷用戶是否登陸過網(wǎng)站,以便下次登錄時能夠?qū)崿F(xiàn)自動登錄(或者記住密碼)。如果我們刪除cookie,則每次登錄必須從新填寫登錄的相關信息。
(2)保存上次登錄的時間等信息。
(3)保存上次查看的頁面(保存訪問過的路由信息)
(4)瀏覽器行為跟蹤(如跟蹤分析用戶行為等)
(5)個性化設置(如用戶自定義設置,主題等)
2.實現(xiàn)步驟:
由于vue是單頁面應用,操作都是在一個頁面完成,而且此項目只在當前打開項目中使用,所以用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ā)
到此這篇關于vuex結合session存儲數(shù)據(jù)解決頁面刷新數(shù)據(jù)丟失問題的文章就介紹到這了,更多相關vuex session存儲數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue vuex vue-rouert后臺項目——權限路由(適合初學)
這篇文章主要介紹了vue vuex vue-rouert后臺項目——權限路由,通過本文可以很清除的捋清楚vue+vuex+vue-router的關系,本版本非常簡單,適合初學者,需要的朋友可以參考下2017-12-12vue中阻止click事件冒泡,防止觸發(fā)另一個事件的方法
下面小編就為大家分享一篇vue中阻止click事件冒泡,防止觸發(fā)另一個事件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02Vue?Router路由hash模式與history模式詳細介紹
Vue?Router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,讓構建單頁面應用變得易如反掌。路由實際上就是可以理解為指向,就是我在頁面上點擊一個按鈕需要跳轉(zhuǎn)到對應的頁面,這就是路由跳轉(zhuǎn)2022-08-08Vue + Elementui實現(xiàn)多標簽頁共存的方法
這篇文章主要介紹了Vue + Elementui實現(xiàn)多標簽頁共存的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06