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 レプリケーション ツールの詳細な説明

推薦する

MySQL 最適化: キャッシュ最適化 (続き)

MySQL 内部には至るところにキャッシュがあります。MySQL のソースコードを読むと、キャッシ...

Linux で NFS ファイル共有サーバーを構築するための詳細な手順

Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...

Docker での環境変数の使用とよくある問題の解決策

序文Docker はコンテナの環境変数を設定できます。設定方法は 2 つあります。イメージを作成する...

JavaScript でサウンド効果付きの花火効果を実装する

コードを書くのに 30 分かかりましたが、この HTML5 Canvas New Year Fire...

Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策

docker リモート API を学習した学生であれば、ポート 2375 についてよくご存知だと思い...

画像ソーシャルネットワーキングサイトのUIアプリケーションの比較分析(図)

私たちの生活、仕事、勉強において、ソーシャル ネットワークは徐々に将来のインターネット発展のトレンド...

Centos7 で Java8 と MySQL をインストールしてデプロイする

通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...

Vue はチャット ボックスで絵文字を送信する機能を実装します

vueチャットボックスで絵文字を送信し、vueインターフェースで絵文字を送信するための具体的なコード...

Centos7 構成 fastdfs および nginx 分散ファイル ストレージ システムの実装プロセス分析

1. libfastcommon-1.0.43 をインストールします。インストール パッケージは h...

MySQL のマスタースレーブレプリケーションと読み取り書き込み分離の原理と使用法の詳細な説明

この記事では、例を使用して、MySQL マスター/スレーブ レプリケーションと読み取り/書き込み分離...

Docker で Portainer ビジュアル インターフェースを構築するための詳細な手順

前回述べた問題を解決するために、オンラインで検索したところ、非常に優れたビジュアル インターフェース...

Linux CRM デプロイメント コードの詳細な説明

Linuxの基本設定 Linux環境でpython3をコンパイルしてインストールする 1. Linu...

MySQL 完全崩壊: クエリフィルタ条件の詳細な説明

概要実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィ...

グリッド共通レイアウトの実装

両側に隙間なし、各列間に隙間あり 幅: 100%; 表示: グリッド; グリッドテンプレート列: r...

Linux ディスク管理 LVM の使用

1. LVM の概要Linux ディスクを管理するときに、このような状況に遭遇することがよくあります...