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)

推薦する

Vue の新しい組み込みコンポーネントの使用方法の詳細な説明

目次1. テレポート1.1 テレポートの紹介1.2 テレポートの使用1.3 プレビュー効果2. サス...

関数の分類の詳細な説明とJavascriptでのこのポイントの例

JS で関数を定義する 3 つの方法例を挙げて説明しましょう。 <スクリプト> //メソ...

Dockerイメージのローカル移行の実装

最近 Docker を勉強しているのですが、よく問題に遭遇します。Docker イメージをダウンロー...

win2008 で mysql8.0.11 を mysql8.0.17 にアップグレードする詳細な手順

アップグレードの背景: MySQLの下位バージョンの脆弱性を解決するために、MySQLはMySQL ...

Linuxコマンドをバックグラウンドで実行する方法

通常、ターミナルでコマンドを実行する場合、別のコマンドの入力を開始する前に、現在のコマンドが終了する...

HTML テーブルタグチュートリアル (8): 背景画像属性 BACKGROUND

テーブルの背景画像を設定します。任意の GIF または JPEG 画像ファイルを使用できます。基本的...

Ubuntu 18.0.4 MySQL 8.0.20 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.20 のインストールおよび設定方法は、参考としてグラフィック チュートリアルにま...

Vue ミックスインの詳しい説明

目次ローカルミックスイングローバル ミックスイン要約するローカルミックスイン <テンプレート&...

JSフロントエンドモジュール化のいくつかの仕様についての簡単な説明

目次序文フロントエンドモジュール開発の価値厄介な名前の競合面倒なファイル依存関係モジュール化の利点C...

IDEA 2020.3.1 で Tomcat をデプロイし、最初の Web プロジェクトを作成するプロセスの詳細な説明

目次Tomcat の紹介Tomcat の展開Web プロジェクトの作成tomcatの設定プロジェクト...

MySQLアラームの詳細な分析と処理

最近、あるサービスにアラームが発生し、耐えられなくなっています。アラーム情報は次のとおりです。メトリ...

vue-nuxt ログイン認証の実装

目次導入リンク始めるコードを読み進めてくださいプロキシ設定傍受を要求する異なるプレフィックスを持つイ...

FileZilla Server の FTP サーバー構成と 425 エラーおよび TLS 警告の解決策の詳細な説明

123WORDPRESS.COM では、FileZilla のダウンロード リンクを提供しています:...

nginxで静的リソースを公開する方法

ステップ準備した静的リソースファイルを指定されたフォルダに配置しますnginx 設定ファイルを変更す...

ウェブ計算機を実装するためのjs

HTML、CSS、JS を使用してシンプルな Web 計算機を作成する方法は?コンピュータには次の...