vuex頁面刷新數據丟失問題的四種解決方式

来源:https://www.cnblogs.com/baoxinyu/archive/2022/11/25/16925890.html
-Advertisement-
Play Games

vuex是大家使用vue時大多數都會選擇的,但是當頁面刷新之後vuex數據會丟失,下麵這篇文章主要給大家介紹了關於vuex頁面刷新數據丟失問題的四種解決方式,需要的朋友可以參考下 為什麼說刷新頁面vuex的數據會丟失 刷新頁面vuex的數據會丟失屬於正常現象,因為JS的數據都是保存在瀏覽器的堆棧記憶體 ...


vuex是大家使用vue時大多數都會選擇的,但是當頁面刷新之後vuex數據會丟失,下麵這篇文章主要給大家介紹了關於vuex頁面刷新數據丟失問題的四種解決方式,需要的朋友可以參考下

為什麼說刷新頁面vuex的數據會丟失

刷新頁面vuex的數據會丟失屬於正常現象,因為JS的數據都是保存在瀏覽器的堆棧記憶體裡面的,刷新瀏覽器頁面,以前堆棧申請的記憶體被釋放,這就是瀏覽器的運行機制,那麼堆棧里的數據自然就清空了。

第一種方法用sessionStorage

將介面返回的數據保存在vuex的store里,也將這些信息也保存在sessionStorage里。註意的是vuex中的變數是響應式的,而sessionStorage不是,當你改變vuex中的狀態,組件會檢測到改變,而sessionStorage就不會了,頁面要重新刷新才可以看到改變,所以應讓vuex中的狀態從sessionStorage中得到,這樣組件就可以響應式的變化。

在store文件夾裡面的js文件 示例如下

const state = {
  authInfo: JSON.parse(sessionStorage.getItem("COMPANY_AUTH_INFO")) || {}
}

const getters = {
  authInfo: state => state.authInfo,
}
const mutations = {
  SET_COMPANY_AUTH_INFO(state, data) {
    state.authInfo = data
    sessionStorage.setItem("COMPANY_AUTH_INFO", JSON.stringify(data))
  }
}

//actions 模塊里無需使用 sessionStorage

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  //actions,
}

其實這裡還可以用 localStorage,但是它沒有期限;所以常用的還是sessionStorage,當瀏覽器關閉時會話結束。

第二種方法是 vuex-along

示例如下

(1)安裝 vuex-along

npm install vuex-along --save

(2)在store文件夾里的index.js中引入vuex-along並配置相關代碼

import Vue from 'vue'
import Vuex from 'vuex'
import indexOne from "./modules/indexOne"
import VueXAlong from 'vuex-along'

Vue.use(Vuex)
const store=new Vuex.Store({
    strict: false,
    modules:{
        indexOne
    },
    
plugins: [VueXAlong({
        name: 'along',     //存放在localStroage或者sessionStroage 中的名字
        local: false,      //是否存放在local中  false 不存放 如果存放按照下麵session的配置配
        session: { list: [], isFilter: true }   
        //如果值不為false 那麼可以傳遞對象 其中 當isFilter設置為true時, list 數組中的值就會被過濾調,這些值不會存放在seesion或者local中
      })]

})

export default store;

 

第三種方法是 vuex-persistedstate

示例如下

(1)安裝 vuex-persistedstate

npm install --save vuex-persistedstate

 (2)在store文件夾里的index.js中引入vuex-persistedstate並配置相關代碼

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import createPersistedState from "vuex-persistedstate"
Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    user
  },

plugins: [createPersistedState({
    storage: window.sessionStorage,
    reducer(val) {
      return { // 只儲存state中的user 
        user: val.base
      }
    }
  })]
})

export default store;

第四種方法是 vuex-persist

示例如下

(1)安裝 vuex-persist

npm install --save vuex-persist
or
yarn add vuex-persist

(2)在store文件夾里的index.js中引入vuex-persist並配置相關代碼

import Vue from 'vue'
import Vuex from 'vuex'
import indexOne from "./modules/indexOne"
import VuexPersistence from 'vuex-persist'
Vue.use(Vuex)

const vuexLocal = new VuexPersistence({
    storage: window.localStorage
})

const store = new Vuex.Store({
    strict: false,
    modules:{
        indexOne,
    },
    plugins: [vuexLocal.plugin]
     
  }) 

export default store;

其實解決此問題的方法有很多,基本上都是要藉助於localStorage或者sessionStroage來存放。

日常開發中,遇到數據量大的時候,一般在頁面刷新的時候再次請求遠程數據,使之動態更新vuex數據。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在所有監控 Linux 系統性能的工具中,Linux 的 top 命令是最好的也是最知名的一個(htop 是其升級版)。top 命令提供了 Linux 系統運行中的進程的動態實時視圖。它能顯示系統的概覽信息和 Linux 內核當前管理的進程列表。它顯示了大量的系統信息,如 CPU 使用、記憶體使用、交... ...
  • Docker和Docker-Compose簡單搭建與基本設置 一、搭建 Docker 1.第一步當然是看官方文檔 2.然後發現一大堆手動搭建的教程(然後小白就這樣搭建了),然後發現最後有一鍵搭建腳本 curl -fsSL https://get.docker.com -o get-docker.sh ...
  • 字元設備是按照位元組流進行讀寫操作的設備,讀寫數據是分先後順序的。常見的點燈、按鍵、 IIC、 SPI和LCD 等都是字元設備 。 字元設備驅動開發步驟: 總體思路: 定義並初始化一個字元設備 -1、定義一個字元設備—>struct cdev 2、定義並初始化字元設備的文件操作集—>struct fi ...
  • 使用的MCU型號為 AIR32F103CCT6. 通過工作機制和示例代碼, 說明如何使用AIR32自帶的記憶體實現簡單的語音錄製和播放功能, 以及使用 ADPCM 對音頻數據進行壓縮, 提高錄製時長. 通過這些機制, 可以快速擴充為實用的錄製設備, 例如外掛I2C或SPI存儲, 或提升無線傳輸的音質,... ...
  • Python基礎之MySQL資料庫 一、SQL語句常用查詢方法 前期數據準備 ​ 為了更加直觀的展示、演示SQL語句查詢關鍵字,需導入下列表格與記錄(數據) ​ 模擬公司,導入創建公司員工表,表內包含:ID、姓名、年齡、工作時間、崗位 創建人員表格: create table emp( id int ...
  • 在 4.2 版本及更高版本中,MongoDB 提供了事務的支持,並且在其是分散式資料庫的基礎上,提供了支持跨多個操作、集合、資料庫、文檔和分片的 ACID 事務。 ...
  • 一、什麼是數據湖? 在探討數據湖技術或如何構建數據湖之前,我們需要先明確,什麼是數據湖? 數據湖的起源,應該追溯到2010年10月。基於對半結構化、非結構化存儲的需求,同時為了推廣自家的Pentaho產品以及Hadoop,2010年Pentaho的創始人兼CTO James Dixon首次提出了數據 ...
  • 華為開發者大會2022(HDC)上,HMS Core手語數字人以全新形象亮相,併在直播中完成了長達3個多小時的實時手語翻譯,向線上線下超過一千萬的觀眾提供了專業、實時、準確的手語翻譯服務,為聽障人士提供了無障礙參會體驗。面對專業性強且辭彙量大的科技大會,HMS Core手語數字人是如何準確且流暢地打 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...