vuex頁(yè)面刷新后數(shù)據(jù)丟失的方法
1. 原因
(1)js代碼是運(yùn)行在內(nèi)存中的,代碼運(yùn)行時(shí)的所有變量、函數(shù)都是保存在內(nèi)存中。
(2)刷新頁(yè)面,以前申請(qǐng)的內(nèi)存被釋放,重新加載腳本代碼,變量要重新賦值。
(3)要想刷新后數(shù)據(jù)不丟失就必須把數(shù)據(jù)存儲(chǔ)在外部,例如:Local Storage、Session Storage、Index DB等。這些都是瀏覽器提供的API,讓你可以將數(shù)據(jù)存儲(chǔ)在硬盤上,做持久化存儲(chǔ)。
2. HTML5提供的2種客戶端存儲(chǔ)數(shù)據(jù)的新方法
localStorage存儲(chǔ)數(shù)據(jù):
(1)存儲(chǔ)的數(shù)據(jù)是永久性的,永不過(guò)期;
(2)作用域是限定在文檔源級(jí)別的。同源的文檔間共享同樣的localStorage數(shù)據(jù)(不論該源的腳本是否真正的訪問(wèn)localStorage)。
他們可以互相讀取對(duì)方的數(shù)據(jù),甚至可以覆蓋對(duì)方的數(shù)據(jù)。但是,非同源的文檔間互相都不能讀取或者覆蓋對(duì)方的數(shù)據(jù)。(即使他們運(yùn)行的腳本是來(lái)自同一臺(tái)第三方的服務(wù)器也不行)。
sessionStorage存儲(chǔ)數(shù)據(jù):
(1)會(huì)話,當(dāng)瀏覽器關(guān)閉時(shí)會(huì)話結(jié)束并清除數(shù)據(jù),有時(shí)間期限;
(2)存儲(chǔ)數(shù)據(jù)的有效期和存儲(chǔ)數(shù)據(jù)的腳本所在的最頂層的窗口或者是瀏覽器標(biāo)簽頁(yè)是一樣的,一旦窗口或者標(biāo)簽頁(yè)被永久關(guān)閉了,
那么所有通過(guò)sessionStorage存儲(chǔ)的數(shù)據(jù)也都被刪除了。
3.具體實(shí)現(xiàn)(登入后保存狀態(tài),退出后移除狀態(tài))
// vuex mutations
const mutations = {
setToken(state, token) {
// 保存用戶認(rèn)證Token
sessionStorage.setItem('token', token);
state.token = token;
},
setUser(state, user) {
// 保存用戶信息
sessionStorage.setItem('user', JSON.stringify(user));
state.user = user;
},
// 注銷登錄,清除token
logout(state) {
state.token = null;
state.user = null;
sessionStorage.removeItem('token');
sessionStorage.removeItem('user');
}
};
// vuex getters
const getters = {
getToken(state){
if(state.token === null){
state.token = sessionStorage.getItem('token')
}
return state.token;
},
// 獲取當(dāng)前用戶登錄信息
getUser(state) {
if(state.user === null) {
state.user = JSON.parse(sessionStorage.getItem('user'));
}
return state.user;
}
};
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3頁(yè)面query參數(shù)變化并重新加載頁(yè)面數(shù)據(jù)方式
在Web開(kāi)發(fā)中,頁(yè)面間的跳轉(zhuǎn)及數(shù)據(jù)刷新是常見(jiàn)問(wèn)題,通過(guò)使用$router.push和$router.replace方法,可以控制頁(yè)面跳轉(zhuǎn)的行為,具體操作時(shí),若發(fā)現(xiàn)頁(yè)面ID變更后數(shù)據(jù)未刷新,可通過(guò)給router-view標(biāo)簽添加key值解決,若使用keep-alive2024-10-10
vue單頁(yè)面如何解決多個(gè)視頻同時(shí)僅能播放一個(gè)問(wèn)題
這篇文章主要介紹了vue單頁(yè)面如何解決多個(gè)視頻同時(shí)僅能播放一個(gè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue.js 中的 v-model 指令及綁定表單元素的方法
這篇文章主要介紹了Vue.js 中的 v-model 指令及綁定表單元素的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12
Vue.js項(xiàng)目部署到服務(wù)器的詳細(xì)步驟
這篇文章給大家介紹了Vue.js項(xiàng)目部署到服務(wù)器的詳細(xì)步驟,既然是部署到服務(wù)器,肯定是需要一個(gè)云的。具體思路步驟大家可以參考下本文2017-07-07
使用vue-router為每個(gè)路由配置各自的title
這篇文章主要介紹了如何使用vue-router為每個(gè)路由配置各自的title,及使用vue router的方法,需要的朋友可以參考下2018-07-07

