1 つの記事で Vuex を理解する

1 つの記事で Vuex を理解する

概要

Vuex は、Vue.js アプリケーション専用に開発された状態管理モードです (公式 Web サイト アドレス: https://vuex.vuejs.org/zh/)。集中型ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用して、ステータスが予測可能な方法で変更されるようにします。

簡単に言うと、Vuex は状態管理モードであり、単純にグローバル オブジェクトとして理解できます。このグローバル オブジェクトでプロパティを変更したり、メソッドを追加したりできますが、従来の JS の直接割り当て形式で変更することはできません。Vuex が提供するルールに従って変更する必要があります。

Vuex の存在は、コンポーネント間の値転送の問題を解決するために使用されます。簡単に言えば、従来の Vue 親子コンポーネント間の値転送のトラブルや欠点から得られるメリットを確認することです。これは公式サイトに明記されています。

ヒント: この記事では、モジュールのインポートとエクスポートの形で vuex を使用します。この記事は少し長いです。辛抱強く読んでいただければ幸いです。もちろん、条件が揃っている場合は、それに従えば効果はより高くなります!

Vuex の 4 つの主要オブジェクト

これらは、状態、ミューテーション、ゲッター、アクションです。

state: Vuex のデータ ソース。必要なすべての公開データはここに保存されます。これは単純に透過的なウェアハウスとして理解できます。このウェアハウスのデータ ソースには、this.$store.state. 変数名を通じてアクセスできます。

ミューテーション: ミューテーションはこのウェアハウスのキーに相当します。ミューテーションを送信することによってのみ、データ ソースを変更できます。つまり、このウェアハウスのデータを変更する場合は、ミューテーション (this.$store.commit("メソッド名")); を通じてのみ変更できます。

ゲッター: ゲッターは、vue の計算プロパティに似ています。ゲッターの戻り値は、状態に依存する値の状態変更に応じて変化します。ゲッターが依存する状態の値が変更されていない場合は、キャッシュが直接読み取られます。変更があった場合は、ここでも対応する変更が発生し、状態値の変更を監視するために使用できます。ここでのゲッターは、状態ウェアハウスの警備員として理解できます。状態のデータが変更された場合、警備員は対応する措置を講じて対応する変更を行います。変更がない場合は何も起こらず、食べ続けて死を待つことになります (ははは、比喩が適切かどうかわかりませんが、これが意味です。理解するだけで、議論しないでください)

アクション: アクションはミューテーションと非常によく似ていますが、ミューテーションは正式には同期的にしか操作できませんが、アクションは非同期的に操作できます。つまり、アクションでは非同期操作を実行する必要があり、アクションは状態を直接変更するのではなく、ミューテーションを送信します。つまり、ウェアハウスに入ってデータを変更するには、まずキーを取得してから変更する必要があります。したがって、アクションはミューテーションに送信され、次にミューテーション メソッドを実行します。

状態の使用

まず、新しいプロジェクトを作成し、vue 環境を構築します。ここでは詳細には触れません。結局のところ、この記事は vuex に関するものです。まず、プロジェクトに vuex をインストールします。

vuex コマンドをインストール: npm install vuex --save

vuex をインストールした後、src ディレクトリに新しい vuex フォルダーを作成し、vuex フォルダーに新しい store.js ファイルを作成します。

ストア.js:

'vue' から Vue をインポートします。
'vuex' から Vuex をインポートします。


Vue.js で Vuex をビルドします。
定数状態 = {
  番号:1
}

デフォルトの新しいVuex.Storeをエクスポートします({
  州、
})

次に、main.jsでstore.jsを参照し、オブジェクトをインスタンス化するときにstoreオブジェクトを追加します。

メイン.js

'vue' から Vue をインポートします
'./App' から App をインポートします
'./router' からルーターをインポートします
//store.js を参照
'./vuex/store' からストアをインポートします。

Vue.config.productionTip = false


/* eslint を無効にする no-new */
新しいVue({
  el: '#app',
  ルーター、
//インスタンス化時にストアオブジェクトストアを追加します。
  コンポーネント: { アプリ },
  テンプレート: '<App/>'
})

次にApp.vueファイルを変更します

アプリ.vue

<テンプレート>
  <div id="アプリ">
    <img src="./assets/logo.png">
// 簡単に観察できるようにビューレイヤーにデータを追加します<p>{{this.$store.state.number}}</p>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 'アプリ'
}
</スクリプト>

<スタイル>
#アプリ {
  フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
</スタイル>

上記のコードから、App.vue に p タグを追加したことがわかります。Vuex では、vuex 内のデータ、つまり状態のデータ ソース ウェアハウスを読み取る必要がある場合は、変数名 this.$store.state を介してアクセスする必要があると規定されています。

突然変異の使用

vuex でデータ ソースを変更する必要がある場合は、ミューテーションを送信して変更できます。

まず、ビュー レイヤーに制御用のボタンを追加する必要があります。

アプリ

<テンプレート>
  <div id="アプリ">
    <img src="./assets/logo.png">
    <p>{{$store.state.number}}</p>
    //データソースを変更するイベントをトリガーするボタンを追加します <button @click="add">button</button>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 'アプリ'、
  方法:{
    追加(){
    //データ ソースを変更するには、vuex で指定されたメソッドを使用する必要があります。this.$store.commit('addFunction');
    }
  }
}
</スクリプト>

<スタイル>
#アプリ {
  フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
</スタイル>
    

次に store.js を変更します。

'vue' から Vue をインポートします。
'vuex' から Vuex をインポートします。


Vue.js で Vuex をビルドします。
定数状態 = {
  番号:1
}

// ミューテーションオブジェクトを追加し、状態パラメータで上記の状態を取得できます
const 変異 = {
  addFunction(状態){
    state.number+=1 を返します。
  }
}

//ここでインスタンスに追加してください。そうしないとエラーが報告されます。export default new Vuex.Store({
  州、
  突然変異
})

ミューテーションは this.$store.commit('メソッド名') を通じてデータ ソースを変更するために送信されることが直感的にわかります。もちろん、ミューテーションはパラメーターを受け取ることもできます。最初のパラメーターはミューテーションのメソッド名で、2 番目のパラメーターはミューテーションが受け取る必要のあるパラメーターです。このようにして、ミューテーションはより柔軟になります。

ゲッターの使用

ゲッターは、Vue のコンピューター使用法に似ています。状態データ ソース ウェアハウス内のデータの変更を監視できます。ゲッターが依存するデータの状態が変化すると、ゲッターが依存するデータも変化し、状態も変化します。

まず、store.js に次のコードを追加します。

'vue' から Vue をインポートします。
'vuex' から Vuex をインポートします。


Vue.js で Vuex をビルドします。
定数状態 = {
  番号:1
}

const ゲッター = {
    //メソッドを通じて状態をトリガーするのは上記の状態オブジェクトであり、状態の値を読み取ることができます。addFunction(state){
    state.number++ を返します。
  }
}
デフォルトの新しいVuex.Storeをエクスポートします({
  州、
//インスタンス化するときにオブジェクトゲッターを追加することを忘れないでください
})

App.vue のビューは次のように変更できます。

<テンプレート>
  <div id="アプリ">
    <img src="./assets/logo.png">
    <p>ページ値: {{$store.state.number}}</p>
    // ページの値と比較するタグを追加します<p>ゲッターの値: {{$store.getters.addFunction}}</p>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 'アプリ'、
}
</スクリプト>

<スタイル>
#アプリ {
  フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
</スタイル>

上記のコードとビューレイヤーを通じて、ゲッターを操作すると、ゲッターのaddFunctionメソッドがトリガーされることがはっきりとわかります。addFunctionメソッドはstate.numberの値を変更します。このとき、numberの値はすでに2なので、ページには値が2として表示されます。++が最後にあるため、この時点でのゲッターの値は1です。つまり、ゲッターが依存するstate.numberの値がゲッター内で変更されると、state.numberも変更されます。state.numberが変更されない場合、ゲッターはまずキャッシュを読み取ります。

アクションの使用

アクション オブジェクトは主に、ミューテーションに似た非同期操作を実行します。違いは、アクションはデータの状態を直接変更するのではなく、ミューテーションを送信することによってデータを変更することです。

まず、store.js のコードを変更します。

'vue' から Vue をインポートします。
'vuex' から Vuex をインポートします。


Vue.js で Vuex をビルドします。
定数状態 = {
  番号:1
}
const 変異 = {
  addFunction(状態){
    state.number++ を返します。
  }
}
const ゲッター = {
  addFunction(状態){
    state.number++ を返します。
  }
}
//コンテキストはストアインスタンスと同じプロパティとメソッドを持つオブジェクトです。const actions = {
  addFunction(コンテキスト){
    コンテキストをコミットします("addFunction");
  }
}
デフォルトの新しいVuex.Storeをエクスポートします({
  州、
  突然変異、
  ゲッター、
//インスタンス化するときにアクションを追加することを忘れないでください
})

App.vue のコードは次のように変更されます。

<テンプレート>
  <div id="アプリ">
    <img src="./assets/logo.png">
    <p>ページ値: {{$store.state.number}}</p>
     <button @click="add">ボタン</button>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 'アプリ'、
  方法:{
    追加(){
//アクションでは、変更のためにミューテーションを送信するには this.$store.dispatch を使用します this.$store.dispatch("addFunction")
    }
  }
}
</スクリプト>

<スタイル>
#アプリ {
  フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
</スタイル>

Vuexの適用シナリオ

プロジェクト開発では、ショッピングカートなどの機能など、何度も読み取ったり変更したりする必要があるデータやパラメータがたくさんある場合があります。このとき、vuex を使用して実装できます。結局のところ、vuex は単なる状態管理モードです。状態管理モードは便利ですが、状態管理でできることは他のチャネルや方法でも実現できるため、必須ではありません。実際、vuex は localStorage に少し似ていると思います。どちらもページ間のデータ損失の問題を解決するためにデータを保存および変更するために使用されます。

上記はVuexの詳細を簡単に理解するための記事です。Vuexについてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご注目ください!

以下もご興味があるかもしれません:
  • Vuex の使い方入門チュートリアル
  • まだvuexをお使いですか?piniaについて学ぶ
  • Vuex でのアクションの使用に関する詳細なチュートリアル
  • VueXのインストールと使用方法の基本チュートリアル
  • Vue学習におけるVuexの使用の詳細な説明
  • Vuexの特性と機能の詳細な説明
  • Vuex のコアコンセプトと基本的な使用法の詳細な説明
  • Vueプロジェクトでvuexを使用する方法
  • Vuex全体のケースの詳細な説明
  • Vuexの役割についての深い理解
  • Vuex の詳細な紹介と使用方法

<<:  docker+devpi を使用してローカル pypi ソースをビルドする方法

>>:  mysql5.7.20 のインストールと設定方法のグラフィック チュートリアル (mac)

推薦する

VMware Workstation 15 Pro インストール ガイド (初心者向け)

01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...

webpackでHMRを手動で実装するいくつかの方法

目次1. はじめに2. GitHub 3. 基本構成プロジェクトディレクトリパッケージ.json c...

Node.js のイベント モジュールに関する知識ポイントのまとめ

Node の研究と応用を通じて、NodeJS はシングルスレッド、イベント駆動型、非ブロッキング I...

JavaScriptのスタックとコピーの詳細な説明

目次1. スタックの定義2. JSスタックの調査1. スタックとヒープ2. 基本型と参照型3. 値渡...

MacでNodeとnpmを完全にアンインストールする方法

npmアンインストール sudo npm アンインストール npm -g この文に遭遇して npm ...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

カスタム変数を使用した MySQL クエリの最適化

目次並べ替えクエリの最適化変更されたばかりのデータ行を繰り返し取得しないようにする遅延ロードされた結...

Vueのフロントエンドシステムとフロントエンドとバックエンドの分離の詳細な説明

目次概要フロントエンド知識システムフロントエンドの3つの要素プレゼンテーション層 (CSS)動作レイ...

Docker クリーンアップ環境操作

丁寧に掃除を始めましょう!未使用ボリュームの一覧docker ボリューム ls -qf dangli...

ネイティブJSで禁止すべきメソッドの記述

目次ブロックレベル関数オブジェクトのプロトタイプを直接変更すると呼び出された人発信者評価ブロックレベ...

MySQL ifnull のネスト使用手順

MySQL ifnull のネストされた使用ifnull をネストする方法があるかどうかオンラインで...

VMware で VMware ツールをインストールしてもインストール ファイルが表示されない問題を解決する方法

VMware ツールは VMware の使用に非常に便利です。そのため、VMware ツールをインス...

Nodejsはgitee実装コードに自動的に同期するドキュメント同期ツールを作成します

本来の意図このツールを作った理由は、コンピューターを使用しているときにいつでも毎日の仕事や生活を記録...

ページを更新せずにフォームを送信するには iframe を使用します

そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...

MySQLクエリの基本的なクエリ操作の学習

序文MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーショ...