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
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...