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)

推薦する

5つのクールで実用的なHTMLタグと属性の紹介

実はこれもクリックベイトのタイトルであり、「派手」とは言えません。ただ私が無知で、こうしたラベルを見...

Vueルータールーティングガードの詳細な説明

目次1. グローバル beforeEach 1. グローバル beforeEach 2. 実装2. ...

Bootstrap 3.0 学習ノートのページレイアウト

今回はレイアウトを中心に学習しますが、これは基本的なHTMLタグのほとんどにも存在するため、比較的簡...

色の16進数カラーコード表表示と16進値の比較表示で簡単に検索できます

さまざまな色の16進コード表[パート1] 赤とピンク、およびそれらの 16 進コード。 #99003...

CentOS 7.4 で MySQL 5.7.28 バイナリモードをインストールする方法

Linuxシステムバージョン: CentOS7.4 MySQL バージョン: 5.7.28 Linu...

メタビューポートタグ(モバイルブラウジングズームコントロール)の使用方法

OP が現在のファームウェアで Web ページを開くと、常に 50% にズームアウトされてから表示さ...

JS ES 新機能テンプレート文字列

目次1. テンプレート文字列とは何ですか? 2. 複数行のテンプレート文字列2.1 式付きテンプレー...

HTML ページジャンプとパラメータ転送の問題

HTMLページジャンプ: window.open(url, "", "...

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

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

CSSを使用して、頻繁に表示される奇妙なボタンを簡単に実装します。

背景グループでは、CSS を使用してインセット コーナー ボタンを実装する方法や、矢印付きのボタンを...

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

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

面接でよく聞かれる Vue 修飾子 13 個

目次1. 怠惰な2.トリム3.番号4.停止5. キャプチャ6.自分7.一度8.予防する9.ネイティブ...

Docker で Confluence をデプロイする

1. 環境要件1. Docker 17以上がインストールされている2. コンテナ操作docker r...

node.js グローバル変数の具体的な使用法

グローバルオブジェクトすべてのモジュールは呼び出すことができますglobal: ブラウザの wind...

vue WatchとComputedの使用の概要

目次01. リスナーウォッチ(1)機能(2)特性と方法(3)監視対象(4)リスニングアレイ02. 計...