vuex刷新頁(yè)面后如何解決丟失store的數(shù)據(jù)問(wèn)題
vuex刷新頁(yè)面后丟失store的數(shù)據(jù)
提出問(wèn)題
最近遇到個(gè)問(wèn)題,vue中vuex中的store數(shù)據(jù),會(huì)在頁(yè)面刷新后初始化,為了解決這一問(wèn)題決定將store里面數(shù)據(jù)在頁(yè)面刷新前保存到sessionStorage,至于為何用他,因?yàn)轫?yè)面關(guān)閉后他會(huì)被清空,localStorage則會(huì)一直存在,cookie又太小,因此sessionStorage最合適。
解決方案
在app.vue的created方法中讀取sessionstorage中的數(shù)據(jù)存儲(chǔ)在store中,此時(shí)用vuex.store的replaceState方法,替換store的根狀態(tài)
在beforeunload方法中將store.state存儲(chǔ)到sessionstorage中。
export default {
? name: 'app',
? created () {
? ? // 在頁(yè)面加載時(shí)讀取sessionStorage
? ? if (sessionStorage.getItem('store')) {
? ? ? this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))
? ? }
? ? // 在頁(yè)面刷新時(shí)將store保存到sessionStorage里
? ? window.addEventListener('beforeunload', () => {
? ? ? sessionStorage.setItem('store', JSON.stringify(this.$store.state))
? ? })
? }
}vuex刷新頁(yè)面數(shù)據(jù)丟失(數(shù)據(jù)持久化)
前提:
為什么要讓vuex數(shù)據(jù)持久化:
在使用vuex的時(shí)候,會(huì)發(fā)現(xiàn)刷新頁(yè)面之后state中存儲(chǔ)的數(shù)據(jù)會(huì)被重置,因?yàn)樗⑿聻g覽器的時(shí)候會(huì)導(dǎo)致整個(gè)頁(yè)面重新加載,vuex的state也會(huì)全部重新加載,所以為了防止這類(lèi)情況的發(fā)生,我們會(huì)將vuex中的數(shù)據(jù)進(jìn)行本地存儲(chǔ),防止頁(yè)面刷新丟失vuex中的數(shù)據(jù)。
存儲(chǔ)到localStorage中
首先安裝vuex-persistedstate
npm install vuex-persistedstate -S
vuex-persistedstate默認(rèn)存儲(chǔ)到localStorage,使用如下:
在store文件夾下面的index.js中引入
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from "vuex-persistedstate"
Vue.use(Vuex)
const store = new Vuex.Store({
? ? plugins: [createPersistedState()],
})存儲(chǔ)到sessionStorage中
使用vuex-persistedstate存儲(chǔ)到sessionStorage,如下:
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from "vuex-persistedstate"
Vue.use(Vuex)
const store = new Vuex.Store({
? ? plugins: [createPersistedState({
? ? ? ? storage: window.sessionStorage
? ? })],
})指定數(shù)據(jù)持久化
使用vuex-persistedstate指定需要持久化的state數(shù)據(jù),如下:
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from "vuex-persistedstate"
Vue.use(Vuex)
const store = new Vuex.Store({
? ? plugins: [createPersistedState({
? ? ? ? storage: window.sessionStorage,
? ? ? ? // 方法1:用reducer,這里的val是由store里面的所有state,不加reducer為儲(chǔ)存所有,reducer為指定存儲(chǔ)
? ? ? ? reducer(val) ?{
? ? ? ? ? ? return {
? ? ? ? ? ? ? ? // 只儲(chǔ)存state中的name
? ? ? ? ? ? ? ? keyName: val.name
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // 方法2:用paths,數(shù)組里面填模塊名,存儲(chǔ)指定模塊
? ? ? ? // paths: ['Home', 'Order']
? ? })]
})總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)完整代碼
柱狀圖(或稱(chēng)條形圖)是一種通過(guò)柱形的長(zhǎng)度來(lái)表現(xiàn)數(shù)據(jù)大小的一種常用圖表類(lèi)型,這篇文章主要給大家介紹了關(guān)于Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)的相關(guān)資料,需要的朋友可以參考下2024-02-02
Vue3優(yōu)雅的實(shí)現(xiàn)跨組件通信的常用方法總結(jié)
開(kāi)發(fā)中經(jīng)常會(huì)遇到跨組件通信的場(chǎng)景,props?逐層傳遞的方法實(shí)在是太不優(yōu)雅了,所以今天總結(jié)下可以更加簡(jiǎn)單的跨組件通信的一些方法,文中通過(guò)代碼實(shí)例講解的非常詳細(xì),需要的朋友可以參考下2023-11-11
Vue升級(jí)帶來(lái)的elementui沖突警告:Invalid prop: custom va
在頁(yè)面渲染的時(shí)候,控制臺(tái)彈出大量警告,嚴(yán)重影響控制臺(tái)的信息獲取功能,但是頁(yè)面基本能正常顯示,這是因?yàn)閂ue升級(jí)帶來(lái)的elementui沖突警告: Invalid prop: custom validator check failed for prop “type“.的解決方案,本文給大家介紹了詳細(xì)的解決方案2025-04-04
vue?模板循環(huán)繪制多行上傳文件功能實(shí)現(xiàn)
這篇文章主要為大家介紹了vue?模板循環(huán)繪制多行上傳文件功能實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
vue3采用xlsx庫(kù)實(shí)現(xiàn)本地上傳excel文件功能
這篇文章主要為大家詳細(xì)介紹了vue3如何采用xlsx庫(kù)實(shí)現(xiàn)本地上傳excel文件功能,并且前端解析為Json數(shù)據(jù),感興趣的小伙伴可以了解一下2025-02-02
element ui el-date-picker組件默認(rèn)值方式
這篇文章主要介紹了element ui el-date-picker組件默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

