vuex名前空間の使用

vuex名前空間の使用

Vuex は単一の状態ツリーを使用するため、すべてのアプリケーション状態が比較的大きなオブジェクトに集中します。アプリケーションが非常に複雑になると、ストア オブジェクトが非常に肥大化する可能性があります。

したがって、Vuex を使用すると、ストアをモジュールに分割することができ、各モジュールには独自の状態、ミューテーション、アクション、ゲッター、さらにはネストされたサブモジュールが含まれます。

デフォルトでは、モジュール内のアクション、ミューテーション、ゲッターはグローバル名前空間に登録され、複数のモジュールが同じミューテーションまたはアクションに応答できるようになります。モジュールのカプセル化と再利用性を高めたい場合は、名前空間の概念が使用されます。

{
    「モジュール1」:{
        州:{}、
        ゲッター:{},
        変異:{},
        アクション:{}
    },
    「モジュール2」:{
        州:{}、
        ゲッター:{},
        変異:{},
        アクション:{}
    }
}

mapState、mapGetters、mapMutations、mapActions の最初のパラメーターは文字列 (名前空間名) であり、2 番目のパラメーターは配列 (名前を変更する必要はありません)/オブジェクト (名前を変更する必要) です。

mapXXXs('名前空間名',['属性名1','属性名2'])

mapXXXs('名前空間名',{

  「コンポーネント内の新しい名前 1」: 「Vuex 内の元の名前 1」、

  「コンポーネント内の新しい名前 2」: 「Vuex 内の元の名前 2」、

})

プロジェクト構造

js の

「vue」からVueをインポートします。
「./App.vue」からアプリをインポートします。
「./router」からルーターをインポートします。
「./store/index」からストアをインポートします。

Vue.config で productionTip を false に設定します。

新しいVue({
  ルーター、
  店、
  レンダリング: h => h(App)
}).$mount("#app");

インデックス

「vue」からVueをインポートします。
「vuex」からVuexをインポートします。
「./modules/cat」からcatをインポートします。
「./modules/dog」からdogをインポートします。

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

デフォルトの新しいVuex.Storeをエクスポートします({
  モジュール: { cat, dog }
});

猫.js

エクスポートデフォルト{
  名前空間: true、
  // ローカル状態: {
    名前:「ブルーアンドホワイトブリティッシュショートヘア」
    年齢: 1
  },
  // ローカル読み取りゲッター: {
    desc: state => "ペット: " + state.name
  },
  // ローカル変更のミューテーション: {
    増分(状態、ペイロード) {
      状態.age += ペイロード数;
    }
  },
  // ローカルアクション actions: {
    grow(コンテキスト、ペイロード) {
      タイムアウトを設定する(() => {
        context.commit("増分", ペイロード);
      }, 1000);
    }
  }
};

犬.js

エクスポートデフォルト{
  名前空間: true、
  // ローカル状態: {
    名前:「ラブラドール」
    年齢: 1
  },
  // ローカル読み取りゲッター: {
    desc: state => "ペット: " + state.name
  },
  // ローカル変更のミューテーション: {
    増分(状態、ペイロード) {
      状態.age += ペイロード数;
    }
  },
  // ローカルアクション actions: {
    grow(コンテキスト、ペイロード) {
      タイムアウトを設定する(() => {
        context.commit("増分", ペイロード);
      }, 1000);
    }
  }
};

こんにちは。

<テンプレート>
  <div class="hello">
    <h3>Vuex 状態ツリー</h3>
    <div>{{this.$store.state} </div>
    <h3>マップ状態</h3>
    <div>{{catName}} {{catAge}}</div>
    <div>{{dogName}} {{dogAge}}</div>
    <h3>マップゲッター</h3>
    <div>{{catDesc}}</div>
    <div>{{犬の説明}}</div>
    <h3>マップミューテーション</h3>
    <button @click="catIncrement({num:1})">猫が変わる</button>
    <button @click="dogIncrement({num:1})">犬の変化</button>
    <h3>マップアクション</h3>
    <button @click="catGrow({num:1})">猫のアクション</button>
    <button @click="dogGrow({num:1})">犬のアクション</button>
  </div>
</テンプレート>

<スクリプト>
「vuex」から mapState、mapGetters、mapMutations、mapActions をインポートします。

エクスポートデフォルト{
  名前: "HelloWorld",
  計算: {
    ...mapState("cat", {
      猫の名前: "名前",
      catAge: 「年齢」
    })、
    ...mapState("犬", {
      犬の名前: "名前",
      dogAge: 「年齢」
    })、
    ...mapGetters("cat", {
      catDesc: "desc"
    })、
    ...mapGetters("犬", {
      dogDesc: "desc"
    })
  },
  メソッド: {
    ...mapMutations("cat", { catIncrement: "increment" }),
    ...mapMutations("dog", { dogIncrement: "increment" }),
    ...mapActions("cat", { catGrow: "grow" }),
    ...mapActions("dog", { dogGrow: "grow" })
  }
};
</スクリプト>

<!-- CSS をこのコンポーネントのみに制限するために "scoped" 属性を追加します -->
<スタイル スコープ lang="scss">
</スタイル>

操作効果

vuex 名前空間の使用に関するこの記事はこれで終わりです。より関連性の高い vuex 名前空間のコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nuxtフレームワークでvuexのモジュール設定を実装する方法
  • Vuex での Store のモジュール分割の詳細な説明
  • 簡単な例を通してvuexとモジュール性を学ぶ
  • Vuex のモジュール性 (モジュール) の詳細な理解
  • vuex の store の名前空間についての簡単な説明
  • Vuex のモジュール化と名前空間の例のデモ

<<:  MySQL での一時テーブルの使用例

>>:  Tomcatの各ポートの機能の詳細な説明

推薦する

Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法

序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...

アダプティブ Web デザインの手法 (モバイル フォンでの優れたアクセス エクスペリエンス)

1. HTML ヘッダーにビューポート タグを追加します。ウェブサイトの HTML ファイルの先頭...

シェルスクリプトを使用したMySQLデータベースの自動バックアップ

シェルスクリプトを使用したMySQLデータベースの自動バックアップデータベースを頻繁にバックアップす...

MacOS での MySQL 8.0.18 のインストールと設定方法のグラフィック チュートリアル

この記事では、MacOSでのMySQL 8.0.18のインストールと成功したコマンドライン操作を記録...

MySQL 8.0.18 のさまざまなバージョンのインストールとインストール中に発生した問題 (要点の要約)

概要: MYSQLの問題解決記録:どのようなインストール方法 (rpm、gz、gz.xz) を使用す...

vue-cli で stimulsoft.reports.js を使用する詳細なチュートリアル

vue-cli は stimulsoft.reports.js を使用します (ナニーレベルのチュー...

MySQL インフラストラクチャ チュートリアル: クエリ ステートメント実行プロセスの詳細な説明

序文私は以前から、SQL 文がどのように実行され、どのような順序で実行されるのかを知りたいと思ってい...

Tomcat プロセスの CPU 使用率が高い場合のトラブルシューティング記録を記録する

この記事では主にTomcatプロセスを記録し、TCP接続が多すぎることによるCPU使用率の過剰のトラ...

Dockerを使用して開発環境を構築する方法を素早く習得します

プラットフォームが成長し続けるにつれて、プロジェクトの研究開発は、開発者向けのさまざまな外部環境、特...

Docker Compose で環境変数を参照する方法の例

プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml...

MySQL 起動エラー 1067 および文字セットを変更して再起動した後の無効な回復

公式サイトからmysql-5.6.37-winx64.zipの解凍バージョンをダウンロードし、構成フ...

ウェブサイトのパフォーマンスを向上させるために画像を最適化する方法

目次概要画像圧縮とはJPEG/JPG JPGの利点JPGの使用シナリオJPGの欠点MozJPEG を...

Vueタイムラインコンポーネントの使い方

この記事の例では、参考までにvueタイムラインコンポーネントの具体的な実装コードを共有しています。具...

HTML テーブル マークアップ チュートリアル (38): ヘッダーの境界線の色属性 BORDERCOLOR

テーブルを美しくするために、ヘッダーに異なる境界線の色を設定できます。基本的な構文<TH 境界...