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)

推薦する

ブラウザでのjsのイベントループイベントキューの詳細な説明

目次序文スタックと2つのキューを理解する実行プロセス簡単な例より難しい例要約する序文以下の内容はブラ...

MySQL 5.7 インストール不要の設定グラフィックチュートリアル

Mysql は人気があり、使いやすいデータベース ソフトウェアです。以下は、mysql の無料インス...

Vue Element フロントエンドアプリケーション開発: Vuex での API ストアビューの使用

目次概要1. フロントエンドとバックエンドの分離とWeb APIの優先ルート設計2. Axiosネッ...

Linuxカーネルをコンパイルする方法

1. 必要なカーネルバージョンをダウンロードする2. オペレーティングシステムにアップロードする3....

Windows 10 での MySQL 8.0.19 のインストールと設定のチュートリアル

来学期にMySQLを勉強します。事前に自宅で練習していませんでした。インストールに時間がかかるとは思...

Node.jsはexpress-fileuploadミドルウェアを使用してファイルをアップロードします

目次プロジェクトを初期化するサーバーの作成クライアントを初期化するコンポーネントの記述ファイルアップ...

Vue3コンポーネントの開発詳細

目次1. はじめに2. コンポーネント開発1. コンポーネントの構成2. ヘッダーコンポーネントの開...

Mysql5.7.17 winx64.zip 解凍バージョンのインストールと設定のグラフィックチュートリアル

1. mysql-5.7.17-winx64.zip をダウンロードします。リンク: https:/...

MySQL マルチテーブル共同クエリ操作例の分析

この記事では、MySQL のマルチテーブル共同クエリ操作について説明します。ご参考までに、詳細は以下...

Linuxオペレーティングシステムは、タスクマネージャーの視覚化機能を実装するためにPythonを使用しています。

1. Pythonのインストール1. フォルダーを作成します。 mkdir python フォルダ...

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が...

自動開始および停止コマンドを適用するには、Docker サービスを再起動します (推奨)

Docker サービス アプリケーションを再起動するコマンドを見てみましょう。具体的な内容は次のと...

Vueプロジェクトのパッケージングと展開の実際のプロセスの記録

目次序文1. 準備 - サーバーとnginxの使用1. サーバーを準備する2. nginxをインスト...

MySQL 5.7.20 zip インストール チュートリアル

MySQL 5.7.20 zipインストール、具体的な内容は次のとおりです(1)圧縮パッケージを解凍...

CSS3 FlexBox の伸縮自在なレイアウトを 10 分で理解する

基本的な紹介特徴Flexbox は、よりシンプルで効率的なレイアウト方法を提供する CSS 表示タイ...