溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vuex數(shù)據(jù)持久化如何實現(xiàn)

發(fā)布時間:2022-10-13 11:40:48 來源:億速云 閱讀:195 作者:iii 欄目:開發(fā)技術(shù)

這篇“vuex數(shù)據(jù)持久化如何實現(xiàn)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“vuex數(shù)據(jù)持久化如何實現(xiàn)”文章吧。

業(yè)務(wù)需求:

在基于vue開發(fā)SPA項目時,為了解決頁面刷新后數(shù)據(jù)丟失的問題,我們一般都是將數(shù)據(jù)存儲在localstorage或sessionstorage中;當數(shù)據(jù)需要全局處理統(tǒng)一管理時,我們也會借助于vue官方提供的vuex來進行數(shù)據(jù)的統(tǒng)一管理。vuex相比localstorage或sessionstorage來說,存儲數(shù)據(jù)更安全些。與此同時,vuex也存在一些弊端,當頁面刷新后,vuex中state存儲的數(shù)據(jù)同時也會被更新,vuex中存儲的數(shù)據(jù)不能持久化,需要監(jiān)聽處理來維持vuex存儲的數(shù)據(jù)狀態(tài)持久化。

為解決頁面刷新后vuex中存儲的數(shù)據(jù)狀態(tài)不能持久化的問題,我采取的方案是借助第三方插件工具來實現(xiàn)vuex數(shù)據(jù)的持久化存儲,來解決頁面刷新后數(shù)據(jù)更新的問題。

方案一:vuex-persistedstate

安裝插件

yarn add vuex-persistedstate
// 或
npm install --save vuex-persistedstate

使用方法

import Vuex from "vuex";
// 引入插件
import createPersistedState from "vuex-persistedstate";

Vue.use(Vuex);

const state = {};
const mutations = {};
const actions = {};

const store = new Vuex.Store({
	state,
	mutations,
	actions,
  /* vuex數(shù)據(jù)持久化配置 */
	plugins: [
		createPersistedState({
      // 存儲方式:localStorage、sessionStorage、cookies
			storage: window.sessionStorage,
      // 存儲的 key 的key值
			key: "store",
			render(state) {
        // 要存儲的數(shù)據(jù):本項目采用es6擴展運算符的方式存儲了state中所有的數(shù)據(jù)
				return { ...state };
			}
		})
	]
});

export default store;

vuex中module數(shù)據(jù)的持久化存儲

/* module.js */
export const dataStore = {
  state: {
    data: []
  }
}
 
/* store.js */
import { dataStore } from "./module"
 
const dataState = createPersistedState({
  paths: ["data"]
});
 
export new Vuex.Store({
  modules: {
    dataStore
  },
  plugins: [dataState]
});

注意事項:

  1. storage為存儲方式,可選值為localStorage、sessionStorage和cookies;

  2. localStorage和sessionStorage兩種存儲方式可以采用上述代碼中的寫法,若想采用cookies坐位數(shù)據(jù)存儲方式,則需要另外一種寫法;

  3. render接收一個函數(shù),返回值為一個對象;返回的對象中的鍵值對既是要持久化存儲的數(shù)據(jù);

  4. 若想持久化存儲部分數(shù)據(jù),請在return的對象中采用key:value鍵值對的方式進行數(shù)據(jù)存儲,render函數(shù)中的參數(shù)既為state對象。

方案二:vuex-persist

安裝插件

yarn add vuex-persist
// 或
npm install --save vuex-persist

使用方法

import Vuex from "vuex";
// 引入插件
import VuexPersistence from "vuex-persist";

Vue.use(Vuex);
//  初始化
const state = {
	userName:"admin"
};
const mutations = {};
const actions = {};
// 創(chuàng)建實例
const vuexPersisted = new VuexPersistence({
	storage: window.sessionStorage,
  render:state=>({
  	userName:state.userName
    // 或
    ...state
  })
});

const store = new Vuex.Store({
	state,
  actions,
  mutations,
  // 數(shù)據(jù)持久化設(shè)置
  plugins:[vuexPersisted.plugins]
});

export default store;

屬性方法

屬性值數(shù)據(jù)類型描述
keystringThe key to store the state in the storage_Default: "vuex"_
storageStorage (Web API)localStorage, sessionStorage, localforage or your custom Storage object.Must implement getItem, setItem, clear etc.Default: window.localStorage
saveStatefunction(key, state[, storage])If not using storage, this custom function handles saving state to persistence
reducerfunction(state) => objectState reducer. reduces state to only those values you want to save. By default, saves entire state
filterfunction(mutation) => booleanMutation filter. Look at mutation.type and return true for only those ones which you want a persistence write to be triggered for. Default returns true for all mutations
modulesstring[]List of modules you want to persist. (Do not write your own reducer if you want to use this)
asyncStoragebooleanDenotes if the store uses Promises (like localforage) or not (you must set this to true when suing something like localforage)Default: false
supportCircularbooleanDenotes if the state has any circular references to it self(state.x === state)Default: false

以上就是關(guān)于“vuex數(shù)據(jù)持久化如何實現(xiàn)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI