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

推薦する

ログインフォームを実装するためのJavaScript

この記事の例では、ログインフォームを実装するためのJavaScriptの具体的なコードを参考までに共...

CSS3 における擬似クラスの一般的な使用法の詳細な説明

before/after 疑似クラスは、要素内に 2 つの追加タグを挿入するのと同じです。最も適した...

LinuxサーバーにGRUBをインストールする手順

Linux サーバーに GRUB をインストールする方法クラウド移行ツールを使用して、CentOS ...

Ubuntu 18.04 LTSでIPアドレスを設定するための完全な手順

序文Ubuntu 18.04 LTS で IP アドレスを設定する方法は、これまで使用されていた設定...

XHTML 入門チュートリアル: XHTML タグ

XHTML タグの紹介<br />おそらく、前のセクションで、XHTML ファイルと通常...

VMware12 に CentOS8 をインストールする方法 (VM 仮想マシンに CentOS8 をインストールするチュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

CSS での三角形の描画と巧妙な応用例の詳細な説明

鉛Web ページ上の一般的な三角形の一部は、画像やフォント アイコンにする必要なく、CSS を使用し...

Docker で lnmp をデプロイする詳細な手順

目次Centosイメージを取得するCentos ベースの nginx コンテナを生成するCentos...

Vueはフォーム検証機能を実装します

この記事では主に、NUXT の validate メソッドに基づいてフォーム検証を実装する方法につい...

vite を使用して vue3 アプリケーションを構築する方法

1. インストールヒント: 現在、VUE3.0 の公式翻訳ドキュメントはありません。しかし、すでに誰...

docker-compose でデプロイしたときに MySQL にアクセスできなくなる問題の簡単な分析

Docker-ComposeとはCompose プロジェクトは、以前の fig プロジェクトから派生...

HTML で margin:0 auto を使用するとページ全体が中央に配置されない問題の解決方法

今日、jsp ページを書きました。<div style="margin:0 auto...

JavaScript Alert関数の実行順序の詳細な説明

目次質問分析する解決するAlert() 関数を置き換えるsetTimeOut関数まとめ質問数日前、J...

水平スクロールバーを実装する2つの方法の例

序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...

MySQL 増分バックアップとブレークポイントリカバリスクリプトの例

導入増分バックアップとは、完全バックアップまたは最後の増分バックアップの後、後続の各バックアップでは...