vuex での mapState の考え方の応用

vuex での mapState の考え方の応用

背景:

需要開発プロセス中に、一部のインターフェースは、ページに表示する必要がある多くのフィールドを含む結果を返します。通常、これらのフィールドは、.vue ファイル内の計算プロパティとしてカプセル化するか、対応するフィールドをデータ内のフィールドに再割り当てして、使いやすさを実現できます。次のように:

計算された(){
  カウント1(){
    this.targetObj.count1 を返す
  },
  カウント2(){
    this.targetObj.count2 を返す
  },
  // ...
  // これを想像してください。同様のコードを5回または10回書く必要があります}

しかし、どちらの方法を使用したとしても、コードの冗長性が大幅に増加し、非常に不便になります。この問題を解決するために、この記事では、冗長なコードを大幅に削減し、データ取得時に統一されたフォールトトレラント処理を実行できるvuexmapメソッドを使用するというアイデアを借用します。

1. マップ方式

vuex の基本的な状態抽出方法は、次のように使用できます。

計算された(){
  カウント(){
    これを返します。$store.count
  }
}

同時に、 vuexも問題に気づきました。ストアで取得するデータが大量にある場合、この方法では多くのコードの冗長性と繰り返しコードがあらゆる場所で生成されます。計算されたプロパティの定義が多数表示され、オブジェクト プロパティの抽出の長いチェーンも表示されます。そのため、 vuex store内の指定されたデータをバッチで取得するための map メソッドを定義します。
このmapメソッドは、実際には特定の形式の関数を生成するために使用されるファクトリ関数 (高階関数) です。以下はソースコードです。 mapState最終的にオブジェクトresを返すことがわかります。 resの各属性はメソッドであり、このメソッドはstateの値を返します。

  var mapState = normalizeNamespace(関数 (名前空間、状態) {
    // 指定された属性を保存および取得するオブジェクトを定義します。var res = {};
    normalizeMap(states).forEach(function (ref) {
      var キー = ref.key;
      var val = ref.val;
      // 指定されたオブジェクトの指定された属性を取得するメソッドを定義します res[key] = function mapsedState () {
        var state = this.$store.state;
        var getters = this.$store.getters;
        // 名前空間に従って指定されたストアモジュールオブジェクトを検索します if (namespace) {
          var module = getModuleByNamespace(this.$store, 'mapState', 名前空間);
          if (!モジュール) {
            戻る
          }
          状態 = module.context.state;
          ゲッター = module.context.getters;
        }
        // 名前空間を指定して取得したストアモジュールのプロパティを取得します。戻り値の typeof val === 'function'
          val.call(this, state, getters)
          : 状態[値]
      };
    });
    // 関数オブジェクトを返す return res
  });

2. 応用

この考え方に従うと、複雑なオブジェクト内のフィールドを取得する方法を最適化できます。ファクトリー関数は次のように定義されます

エクスポート const mapTargetValue = (nameSpace, keyList = [])=>{
  定数結果 = {}
  // 注意: 返されるメソッドに矢印関数を使用しないでください。そうしないと、このメソッドを取得できなくなります。
  // ここでは 2 つの形式の keyList が互換性があります。mapState の属性名変更の使用形式を参照してください。if(Array.isArray(keyList)){
    keyList.forEach( キー => 結果[キー] = 関数(){ 
        // ここでは、名前空間オブジェクトを this で直接取得できると仮定します // もちろん、指定されたオブジェクトを取得する複雑さは、コード ロジックによって異なります。 return this[nameSpace][key] || 0
    })   
  }それ以外の場合(keyListのtype=== 'object' && keyList){
    for(let key in keyList){
      result[keyList[key]] = function(){ return this[nameSpace][key] || 0}
    }
  }
  結果を返す
}

このメソッドの使用方法はmapStateとまったく同じです。従来の値取得方式と比較して、繰り返しコードの量を大幅に削減できます。具体的な用途は以下のとおりです

計算: {
    ...mapTargetValue("targetObj", ["count1", "count2"]),
    ...mapTargetValue("targetObj", { count1: "count3", count2: "count4"}),
}

これで、vuex での mapState のアイデアの適用に関するこの記事は終わりです。より関連性の高い vuex mapState コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue3 で状態管理を実装するために provide を使用する方法
  • Vue フロントエンド開発補助機能状態管理詳細例
  • vuexプロジェクトにおけるログインステータス管理の実践プロセス
  • Vue3.0 で Vuex 状態管理を開始する方法をすぐに習得します
  • Vueのシンプルな状態管理ストアモードを理解する方法
  • Vueプロジェクトでvuexを使用する方法
  • vuex名前空間の使用
  • Vue の状態管理: Vuex の代わりに Pinia を使用する

<<:  HTMLシールドの右クリックメニューと左クリック入力機能の例

>>:  Dockerでudpポート番号を指定する問題を解決する

推薦する

MySQL外部キーの3つの関係例の詳細な説明

この記事では、例を使用して、MySQL 外部キーの 3 つの関係について説明します。ご参考までに、詳...

MySQL に外部キー制約を追加する具体的な方法

このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell ...

Linuxはnode.jsを完全に削除し、yumコマンドで再インストールします。

最初のステップ組み込みのパッケージ管理機能で一度削除する yum 削除 nodejs npm -y ...

React setStateデータ更新メカニズムの詳細な説明

目次setStateを使用する理由setStateの使用法非同期または同期更新要約するsetStat...

VMware 仮想マシンの 3 つの接続方法の例の分析

NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...

VUE 応答性原理の詳細な説明

目次1. 応答原理の基盤2. コアオブジェクト: Dep と Watcher 3. 依存関係を収集し...

antd pro に基づく SMS 認証コード ログイン機能 (プロセス分析)

目次まとめ全体的なプロセスフロントエンドページコード検証コードとログイン サービスをリクエストする ...

VS2022 リモート デバッグ ツールの使い方

WeChat 関連サービスをデバッグする場合など、職場のサーバー環境でリモートデバッグを行う必要があ...

Unicode における CJK (中国語、日本語、韓国語の統合表意文字) 文字の概要

CJK は CJK Unified Ideographs の略称で、「中国語、日本語、韓国語の統一表...

htmlはハイパーリンク付きの新しいウィンドウを開き、ウィンドウのプロパティを制御できます。

1. HTMLハイパーリンクによって開かれるウィンドウのサイズコードをコピーコードは次のとおりです...

MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

1 QPS 計算 (1 秒あたりのクエリ数) MyISAMエンジンベースのDBの場合 MySQL&g...

Linux システムを起動時に自動的にスクリプトを実行するように設定する方法の例

序文みなさんこんにちは。私は梁旭です。職場では、システムの起動後にスクリプトやサービスを自動的に開始...

CocosCreator で http と WebSocket を使用する方法

目次1. HTTPGET 2. HTTP POSTウェブソケット4. Egretのhttpとwebs...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

MySQL データベースの文字化け問題の原因と解決策

序文データベースのデータを表示すると、文字化けした文字が表示されることがあります。実際、どのようなデ...