vuex データの永続化のための 2 つの実装ソリューション

vuex データの永続化のための 2 つの実装ソリューション

ビジネス要件:

Vue をベースに SPA プロジェクトを開発する場合、ページの更新後にデータが失われる問題を解決するために、通常はデータをローカルストレージまたはセッションストレージに保存します。データをグローバルに処理して均一に管理する必要がある場合は、Vue が公式に提供する vuex を使用してデータを均一に管理します。 localstorage や sessionstorage と比較すると、vuex はデータの保存においてより安全です。同時に、vuex にはいくつかの欠点もあります。ページが更新されると、vuex の状態に保存されているデータも更新されます。vuex に保存されているデータは永続化できず、vuex に保存されているデータ状態の永続性を維持するために監視処理が必要です。

ページが更新された後、vuex に保存されたデータの状態が永続化できないという問題を解決するために、私が採用した解決策は、サードパーティのプラグイン ツールを使用して vuex データの永続的な保存を実現し、ページが更新された後のデータ更新の問題を解決することです。

解決策 1: vuex-persistedstate

プラグインをインストールする

糸にvuex-persistedstateを追加する
// または npm install --save vuex-persistedstate

使い方

「vuex」からVuexをインポートします。
// プラグインをインポートします。 import createPersistedState from "vuex-persistedstate";

Vue.js で Vuex をビルドします。

定数状態 = {};
const 変異 = {};
定数アクション = {};

定数ストア = 新しい Vuex.Store({
	州、
	突然変異、
	行動、
  /* vuex データ永続化設定 */
	プラグイン: [
		永続状態を作成します({
      // ストレージメソッド: localStorage、sessionStorage、cookies
			ストレージ: window.sessionStorage、
      // 保存されたキーのキー値 key: "store",
			レンダリング(状態) {
        //保存するデータ: このプロジェクトでは、es6 拡張演算子を使用してすべてのデータを状態に保存します return { ...state };
			}
		})
	]
});

デフォルトストアをエクスポートします。

vuex でのモジュールデータの永続的な保存

/* モジュール.js */
エクスポートconst dataStore = {
  州: {
    データ: []
  }
}
 
/* ストア.js */
'./module' から { dataStore } をインポートします。
 
const dataState = createPersistedState({
  パス: ['データ']
});
 
新しい Vuex.Store をエクスポートします({
  モジュール:
    データストア
  },
  プラグイン: [dataState]
});

注記:

  1. storage は保存方法で、オプションの値は localStorage、sessionStorage、cookies です。
  2. 上記のコードでは、localStorage および sessionStorage ストレージ メソッドを記述できます。Cookie を使用してデータを保存する場合は、別の方法で記述する必要があります。
  3. Render は関数を受け取り、オブジェクトを返します。返されたオブジェクト内のキーと値のペアは、永続的に保存されるデータです。
  4. 一部のデータを永続化したい場合は、キーと値のペアを使用して、返されるオブジェクトにデータを保存してください。レンダリング関数のパラメーターは状態オブジェクトです。

解決策2: vuex-persist

プラグインをインストールする

糸を追加する vuex-persist
// または npm install --save vuex-persist

使い方

「vuex」からVuexをインポートします。
// プラグインをインポートします。 import VuexPersistence from "vuex-persist";

Vue.js で Vuex をビルドします。
// 初期化 const state = {
	ユーザー名:'admin'
};
const 変異 = {};
定数アクション = {};
// インスタンスを作成する const vuexPersisted = new VuexPersistence({
	ストレージ: window.sessionStorage、
  レンダリング:状態=>({
  	ユーザー名:状態.ユーザー名
    // または...状態
  })
});

定数ストア = 新しい Vuex.Store({
	州、
  行動、
  突然変異、
  //データ永続設定プラグイン: [vuexPersisted.plugins]
});

デフォルトストアをエクスポートします。

プロパティメソッド

プロパティ値データ型説明する
ストレージに状態を保存するためのキー_ デフォルト: 'vuex' _
ストレージストレージ (Web API) localStorage、sessionStorage、localforage、またはカスタム Storage オブジェクト。getItem、setItem、clear などを実装する必要があります。デフォルト: window.localStorage
セーブステート関数(キー、状態[、ストレージ])ストレージを使用しない場合、このカスタム関数は状態を永続的に保存します
減速機関数(状態) => オブジェクト状態リデューサー。保存したい値のみに状態を減らします。デフォルトでは、状態全体を保存します。
フィルター関数(ミューテーション) => ブール値ミューテーション フィルターmutation.typeを調べて、永続書き込みをトリガーしたいものに対してのみ true を返します。デフォルトでは、すべてのミューテーションに対して true を返します。
モジュール弦[]永続化したいモジュールのリスト。(これを使用する場合は、独自のリデューサーを作成しないでください)
非同期ストレージブール値ストアが Promises (localforage など) を使用するかどうかを示します (localforage などを使用する場合は、これを true に設定する必要があります)デフォルト: false
サポートCircularブール値状態に循環参照があるかどうかを示します (state.x === state)デフォルト: false

要約する

上記の 2 つのソリューションにより、vuex データの永続的なストレージを実現できます。ソリューション 1 は実際の開発プロセスで使用したもので、ソリューション 2 は Github で見たものです。一般的に、どちらも当時の最終的なニーズを満たすことができ、参照用に該当するケースのデモがあります。比較すると、GitHub でのソリューション 1 の開始数はソリューション 2 の開始数よりも多くなっています。

実際の状況に応じて、あなたに合ったソリューションを選択してください。

これで、vuex データの永続性に関する 2 つの実装ソリューションに関するこの記事は終了です。vuex データの永続性に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vuex 永続化プラグイン (vuex-persistedstate) は、更新データの消失の問題を解決します。
  • ページを更新すると状態データが消える問題を解決するには、vuex を使用します。
  • vuexデータページを更新した後の初期化操作を解決する
  • vuex リフレッシュ後のデータ損失、データの永続性、vuex-persistedstate の問題

<<:  Ubuntu 19にTheanoをインストールする際の問題を解決する

>>:  Python ベースの MySQL レプリケーション ツールの詳細な説明

推薦する

VueはSplitを使用して、ユニバーサルドラッグアンドスライドパーティションパネルコンポーネントをカプセル化します。

目次序文始める基本レイアウトデータバインディングイベントバインディング最適化ジッター問題を最適化する...

MySQL の厄介な Aborted 警告をケーススタディで分析する

この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...

MySQL 5.7 で my.ini ファイルが見つからない場合の解決策

my.ini とは何ですか? my.ini は、MySQL データベースで使用される設定ファイルです...

Angularコンポーネントの仲介モードの詳細な説明

目次1. 仲介業者モデル2. 例1. 見積コンポーネントに購入ボタンを追加する2. 親コンポーネント...

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。月が再びゆっく...

jQuery はシャッター効果を実現します (li 配置を使用)

この記事では、ブラインド効果を実現するためのjQueryの具体的なコードを参考までに紹介します。具体...

ミニプログラムはリストのカウントダウン機能を実装します

この記事の例では、ミニプログラムでリストカウントダウンを実装するための具体的なコードを参考までに共有...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

jQuery を使用して、iframe 下の無効なページ アンカー ポイントの問題を修正する

適用シナリオ: iframe ページにスクロール バーがなく、親ウィンドウにスクロール バーが表示さ...

CSS3でシャトル星空のアニメーションを実現

結果: html <canvas id="スターフィールド"><...

Linux での MongoDB のインストールに関するチュートリアル

MongoDB はクロスプラットフォームであり、Windows と Linux の両方にインストール...

Chromeブラウザの自動パスワード保存プロンプト機能を無効にする方法

注: Web 開発では、フォームに autocomplete="off" を追加...

Linux ディスクとディスク パーティションを理解するための記事

序文Linux システムのすべてのハードウェア デバイスは、ファイルの形式で表現され、使用されます。...

ECMAScriptにおけるプリミティブ値と参照値の詳しい説明

目次序文動的プロパティとは何ですか?値のコピー値の種類を決定する要約する序文これは JavaScri...

CSSマウスを画像の上に置いたときにマスクレイヤー効果を追加する実装

まず効果を見てみましょう: マウスを画像の上に移動すると、影の効果とテキスト/アイコンが追加されます...