解決vuex數(shù)據(jù)頁(yè)面刷新后初始化操作
在vue項(xiàng)目的開(kāi)發(fā)中經(jīng)常會(huì)用到vuex來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ),然而在開(kāi)發(fā)過(guò)程中會(huì)出現(xiàn)刷新后頁(yè)面的vuex的state數(shù)據(jù)初始化問(wèn)題!下面是我用過(guò)的解決方法
1、利用storage緩存來(lái)實(shí)現(xiàn)vuex數(shù)據(jù)的刷新問(wèn)題
我們可以在mutation等vuex的方法中對(duì)于數(shù)據(jù)進(jìn)行改變時(shí),將數(shù)據(jù)同時(shí)存儲(chǔ)進(jìn)我們的本地瀏覽器緩存中;下面是我在mutation中寫(xiě)的方法;
同步將數(shù)據(jù)的更改保存,也可以在頁(yè)面調(diào)用vuex的mutation方法時(shí)同步更改;但是這種方法只能針對(duì)少量的數(shù)據(jù)需要保持不刷新,在真正的卡發(fā)中并不適用
2、利用已有的插件來(lái)進(jìn)行保存新?tīng)顟B(tài)
一致的插件中,我目前使用的是vuex-along插件,該插件使用非常方便簡(jiǎn)潔。
通過(guò) cnpm i vuex-along -D下載插件,在進(jìn)行引入,在store里面通過(guò)plugin來(lái)使用,這樣就能將所有的state的數(shù)據(jù)都進(jìn)行保存,不回應(yīng)為刷新而更改,當(dāng)然如果你想僅對(duì)某些數(shù)據(jù)進(jìn)行保存,也可以使用對(duì)應(yīng)的插件的api來(lái)實(shí)現(xiàn),具體的api請(qǐng)看github;
上面的代碼僅為展示vuex-along插件的使用,項(xiàng)目的真實(shí)寫(xiě)法并不規(guī)范,對(duì)于一般項(xiàng)目會(huì)將vuex的每個(gè)模塊獨(dú)立拆分出來(lái),分別進(jìn)行管理
同時(shí)在項(xiàng)目中我們也都盡量使用輔助函數(shù)來(lái)實(shí)現(xiàn)vuex的管理,而不會(huì)應(yīng)用原生的寫(xiě)法
對(duì)于state和getter的數(shù)據(jù)可以在計(jì)算屬性中來(lái)因夠用。而mutation和action則在methods方法應(yīng)用;如果你需要修改計(jì)算屬性,現(xiàn)在需要設(shè)置對(duì)應(yīng)的setter。
以上純屬自己的一點(diǎn)意見(jiàn),如果需要請(qǐng)采納!
補(bǔ)充知識(shí):vuex在刷新頁(yè)面時(shí)保持?jǐn)?shù)據(jù)不變(vuex狀態(tài)持久化)
問(wèn)題:
在 vue 項(xiàng)目中使用 vuex 來(lái)進(jìn)行數(shù)據(jù)狀態(tài)的管理,當(dāng)刷新頁(yè)面時(shí),vuex 中 state 的數(shù)據(jù)會(huì)出現(xiàn)初始化問(wèn)題(數(shù)據(jù)丟失)
解決方法:
1.使用 webStorage 緩存
當(dāng)瀏覽器窗口關(guān)閉或者刷新時(shí),會(huì)觸發(fā)beforeunload事件,此時(shí),可以使用 webStorage 緩存來(lái)實(shí)現(xiàn) vuex 在刷新頁(yè)面時(shí)保持?jǐn)?shù)據(jù)不變
created(){ //在頁(yè)面加載時(shí)讀取sessionStorage里的狀態(tài)信息 this.$store.state.userInfo = window.sessionStorage.getItem("userInfo") //在頁(yè)面刷新時(shí)將vuex里的信息保存到sessionStorage里 window.addEventListener("beforeunload", () => { window.sessionStorage.setItem("userInfo", this.$store.state.userInfo) }) }
2.使用vuex狀態(tài)持久化插件vuex-persistedstate
vuex-persistedstate插件使用瀏覽器的本地存儲(chǔ)( local storage )對(duì) vuex 的狀態(tài)( state )進(jìn)行持久化
安裝 vuex-persistedstate:
npm install vuex-persistedstate --save-dev
在store文件夾的 index.js 中使用
//引入vuex-persistedstate import createPersistedState from 'vuex-persistedstate' ...... export default new Vuex.Store({ ...... //配置vuex-persistedstate plugins: [createPersistedState( //配置將vuex的狀態(tài)儲(chǔ)存到sessionStorage中(默認(rèn)儲(chǔ)存到localStorage中) { storage: window.sessionStorage } )] })
以上這篇解決vuex數(shù)據(jù)頁(yè)面刷新后初始化操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js樣式動(dòng)態(tài)綁定實(shí)現(xiàn)小結(jié)
這篇文章主要介紹了Vue.js樣式動(dòng)態(tài)綁定實(shí)現(xiàn)小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01vue關(guān)于接口請(qǐng)求數(shù)據(jù)過(guò)大導(dǎo)致瀏覽器崩潰的問(wèn)題
這篇文章主要介紹了vue關(guān)于接口請(qǐng)求數(shù)據(jù)過(guò)大導(dǎo)致瀏覽器崩潰的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue項(xiàng)目中使用fontawesome圖標(biāo)庫(kù)的方法
fontawesome的圖標(biāo)有免費(fèi)版和專業(yè)版,本文主要使用free版本,一般free版本的圖標(biāo)夠用,free圖標(biāo)又劃分為三個(gè)圖標(biāo)庫(kù),主要有實(shí)心圖標(biāo)solid、常規(guī)圖標(biāo)regular及品牌圖標(biāo)brand,根據(jù)需求去下載對(duì)應(yīng)的圖標(biāo)庫(kù),無(wú)須全部下載,對(duì)vue?fontawesome圖標(biāo)庫(kù)相關(guān)知識(shí)感興趣的朋友一起看看吧2023-12-12Vue自定義v-has指令實(shí)現(xiàn)按鈕權(quán)限判斷
這篇文章主要給大家介紹了關(guān)于Vue自定義v-has指令實(shí)現(xiàn)按鈕權(quán)限判斷的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04elementUI?el-radio?無(wú)法點(diǎn)擊的問(wèn)題解決
本文主要介紹了elementUI?el-radio?無(wú)法點(diǎn)擊的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07vue使用elementUI組件實(shí)現(xiàn)分頁(yè)效果
分頁(yè)在展示數(shù)據(jù)列表的場(chǎng)景肯定是非常多的,一般的項(xiàng)目開(kāi)發(fā)中,數(shù)據(jù)量特別大,一般都是后端接口直接處理分頁(yè)返回,前端直接調(diào)用即可,本文給大家介紹了vue使用elementUI組件實(shí)現(xiàn)分頁(yè)效果,需要的朋友可以參考下2023-12-12