在做vue項目的過程中有時候會遇到一個問題,就是進行F5頁面刷新的時候,頁面的數據會丟失,出現這個問題的原因是因為當用vuex做全局狀態管理的時候,store中的數據是保存在運行內存中的,頁面刷新時會重新加載vue實例,store中的數據就會被重新賦值,因此數據就丟失了,解決方式如下:
方法1、利用localStorage/sessionStorage將數據儲存在外部,做一個持久化儲存,通過監聽beforeunload事件來進行數據的localStorage存儲,beforeunload事件在頁面刷新時進行觸發,具體做法是在App.vue的created()周期函數中下如下代碼:
export default {
name: 'App',
created () {
//在頁面加載時讀取localStorage里的狀態信息
if (window.localStorage.getItem('list')) {
//this.$store.replaceState()替換 store 的根狀態
this.$store.replaceState(Object.assign({}, this.$store.state,
JSON.parse(window.localStorage.getItem('list'))))
}
//在頁面刷新時將vuex里的信息保存到localStorage里
window.addEventListener('beforeunload', () => {
window.localStorage.setItem('list', JSON.stringify(this.$store.state))
})
}
}
方法2:由此得知計算屬性的結果會被緩存,也就是說在有緩存的情況下,computed會優先使用緩存,於是也可以在state數據相對應的頁面這樣寫:
computed:{
orderList() {
return this.$store.state.orderList
}
}
