Vue の基本入門: Vuex のインストールと使用

Vue の基本入門: Vuex のインストールと使用

このチュートリアルは入門チュートリアルです。間違いがあれば指摘してください。

1. vuexとは何か

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

以下はvuexの簡単な紹介です

2. インストールと導入

まずvuexをインストールします。

npm インストール vuex --save

main.js に導入後、使用可能になります。

// `import` コマンドで読み込む Vue ビルド バージョン
// (ランタイムのみまたはスタンドアロン) が webpack.base.conf にエイリアスとともに設定されています。
'vue' から Vue をインポートします
'./App' から App をインポートします
'./router' からルーターをインポートします
//vuex は import Vuex from 'vuex' を使用します

Vue.use(Vuex)
定数ストア = 新しい Vuex.Store({
    州: {
        //グローバル変数数: 31231
    }
})

Vue.config.productionTip = false
    /* eslint を無効にする no-new */
新しいVue({
    el: '#app',
    ルーター、
    //vuexをストアに追加する必要があります。
    コンポーネント: { アプリ },
    テンプレート: '<App/>'
})

3. vuexの使用

<テンプレート>
<div>
      ボスは{{showData}}を持っています
      <HelloWorld2/>
</div>
</テンプレート>

<スクリプト>
'./HelloWorld2' から HelloWorld2 をインポートします。
'./son' から son をインポートします

エクスポートデフォルト{
名前: 'HelloWorld',
データ () {
  戻る {
       メッセージ2: "",
       クー
    }
},
コンポーネント:{
  こんにちは、
  息子
}、計算: {
  表示データ(){
    this.$store.state.count を返します。
  }
}
}

</スクリプト>
<テンプレート>
<div>
2番目には{{$store.state.count}}があります
</div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
名前: 'HelloWorld2',
データ() {
      戻る {
      }
    }
}
</スクリプト>

4. プロセスの紹介

図に示すように、vuexを使用しない場合のプロセスは、view->actions->state->viewとなります。

vuexを使用した後のプロセスは、vuecomponent->(dispatch)actions->(commit)mutations->(mutate)state->(render)->vuecomponentとなります。

5. 突然変異

状態が変更された場合、Vuex ストア内の状態を変更する唯一の方法は、ミューテーションを送信することです。 Vuex のミューテーションはイベントと非常によく似ています。各ミューテーションには、文字列イベント タイプ (type) とコールバック関数 (handler) があります。このコールバック関数は、実際に状態の変更を行う場所であり、最初の引数として状態を受け取ります。

// `import` コマンドで読み込む Vue ビルド バージョン
// (ランタイムのみまたはスタンドアロン) が webpack.base.conf にエイリアスとともに設定されています。
'vue' から Vue をインポートします
'./App' から App をインポートします
'./router' からルーターをインポートします
//vuex は import Vuex from 'vuex' を使用します

Vue.use(Vuex)
定数ストア = 新しい Vuex.Store({
    州: {
        //グローバル変数数: 31231
    },
    //状態メソッドの変更: {
        //状態は上記の状態です
        データを追加(状態) {
            //状態の変更 state.count++
        }
    }
})

Vue.config.productionTip = false
    /* eslint を無効にする no-new */
新しいVue({
    el: '#app',
    ルーター、
    //vuexをストアに追加する必要があります。
    コンポーネント: { アプリ },
    テンプレート: '<App/>'
})

次に変更を実行します

<テンプレート>
<div>
      ボスは{{showData}}を持っています
      <HelloWorld2/>
      <button type = "button" v-on:click = "changeData"> 変更ボタン</button>
</div>
</テンプレート>

<スクリプト>
'./HelloWorld2' から HelloWorld2 をインポートします。
'./son' から son をインポートします

エクスポートデフォルト{
名前: 'HelloWorld',
データ () {
  戻る {
       メッセージ2: "",
    }
},
コンポーネント:{
  こんにちは、
  息子
}、計算: {
  表示データ(){
    this.$store.state.count を返します。
  }
},
メソッド: {
  //変更を実行する changeData(event){
      this.$store.commit("データを追加");
  }
}
}

</スクリプト>

6. ゲッターフィルタリング

突然変異を制限することができます。たとえば、突然変異が 0 未満の場合は、減らすことはできません。

// `import` コマンドで読み込む Vue ビルド バージョン
// (ランタイムのみまたはスタンドアロン) が webpack.base.conf にエイリアスとともに設定されています。
'vue' から Vue をインポートします
'./App' から App をインポートします
'./router' からルーターをインポートします
//vuex は import Vuex from 'vuex' を使用します

Vue.use(Vuex)
定数ストア = 新しい Vuex.Store({
    州: {
        //グローバル変数数: 0
    },
    //状態メソッドの変更: {
        //状態は上記の状態です
        データを追加(状態) {
            //状態の変更 state.count++
        }
    },
    //フィルターゲッター: {
        getState(状態) {
            状態数 >= 5 の場合
                戻る 5
            } それ以外 {
                状態.countを返す
            }
        }
    }
})

Vue.config.productionTip = false
    /* eslint を無効にする no-new */
新しいVue({
    el: '#app',
    ルーター、
    //vuexをストアに追加する必要があります。
    コンポーネント: { アプリ },
    テンプレート: '<App/>'
})

電話するとき

<テンプレート>
<div>
2番目には{{$store.getters.getState}}があります
</div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
名前: 'HelloWorld2',
データ() {
      戻る {
      }
    }
}
</スクリプト>

7.アクション - 非同期処理

アクションは、次の点を除いて、ミューテーションに似ています。

アクションは、状態を直接変更するのではなく、突然変異を送信します。アクションには任意の非同期操作を含めることができます。突然変異は同期的にのみ処理できる
main.js です。次に例を示します。

// `import` コマンドで読み込む Vue ビルド バージョン
// (ランタイムのみまたはスタンドアロン) が webpack.base.conf にエイリアスとともに設定されています。
'vue' から Vue をインポートします
'./App' から App をインポートします
'./router' からルーターをインポートします
//vuex は import Vuex from 'vuex' を使用します

Vue.use(Vuex)
定数ストア = 新しい Vuex.Store({
    州: {
        //グローバル変数数: 0
    },
    //状態メソッドの変更: {
        //状態は上記の状態です
        データを追加(状態) {
            //状態の変更 state.count++
        }
    },
    //フィルターゲッター: {
        getState(状態) {
            状態数 >= 5 の場合
                戻る 5
            } それ以外 {
                状態.countを返す
            }
        }
    },
    アクション: {
        //アクショントリガーミューテーションメソッドの利点は非同期処理です。addData(context) {
            //非同期の setTimeout(() => { をシミュレートする
                コンテキスト.commit('addData')
            }, 1000)
        }
    }
})

Vue.config.productionTip = false
    /* eslint を無効にする no-new */
新しいVue({
    el: '#app',
    ルーター、
    //vuexをストアに追加する必要があります。
    コンポーネント: { アプリ },
    テンプレート: '<App/>'
})

送信時にアクションを呼び出す必要があります。

<テンプレート>
<div>
      ボスは{{showData}}を持っています
      <HelloWorld2/>
      <button type = "button" v-on:click = "changeData"> 変更ボタン</button>
</div>
</テンプレート>

<スクリプト>
'./HelloWorld2' から HelloWorld2 をインポートします。
'./son' から son をインポートします

エクスポートデフォルト{
名前: 'HelloWorld',
データ () {
  戻る {
       メッセージ2: "",
    }
},
コンポーネント:{
  こんにちは、
  息子
}、計算: {
  表示データ(){
    this.$store.getters.getState を返します。
  }
},
メソッド: {
  //変更を実行する changeData(event){
      //操作ミューテーションメソッド //this.$store.commit("addData");
      //アクションによってトリガーされるミューテーション メソッドの代わりにアクションを操作する必要があります this.$store.dispatch("addData");

  }
}
}

</スクリプト>

8.モジュール

単一の状態ツリーを使用することで、すべてのアプリケーション状態が 1 つの大きなオブジェクトに集中化されます。アプリケーションが非常に複雑になると、ストア オブジェクトが非常に肥大化する可能性があります。

上記の問題を解決するために、Vuex ではストアをモジュールに分割することができます。各モジュールには独自の状態、ミューテーション、アクション、ゲッター、さらにはネストされたサブモジュールがあり、上から下まで同じように分割されています。

ルートを分割できる場合は、ファイルはmain.jsには配置されず、vuexに配置されます。新しいstore/index.jsを作成します。

//vuex は import Vue from 'vue' を使用します
'vuex' から Vuex をインポートします

Vue.use(Vuex)

デフォルトの新しいVuex.Storeをエクスポートします({
    州: {
        //グローバル変数数: 0
    },
    //状態メソッドの変更: {
        //状態は上記の状態です
        データを追加(状態) {
            //状態の変更 state.count++
        }
    },
    //フィルターゲッター: {
        getState(状態) {
            状態数 >= 5 の場合
                戻る 5
            } それ以外 {
                状態.countを返す
            }
        }
    },
    アクション: {
        //アクショントリガーミューテーションメソッドの利点は非同期処理です。addData(context) {
            //非同期の setTimeout(() => { をシミュレートする
                コンテキスト.commit('addData')
            }, 1000)
        }
    }
})

main.jsを変更する

// `import` コマンドで読み込む Vue ビルド バージョン
// (ランタイムのみまたはスタンドアロン) が webpack.base.conf にエイリアスとともに設定されています。
'vue' から Vue をインポートします
'./App' から App をインポートします
'./router' からルーターをインポートします
'./store' からストアをインポートします


Vue.config.productionTip = false
    /* eslint を無効にする no-new */
新しいVue({
    el: '#app',
    ルーター、
    //vuexをストアに追加する必要があります。
    コンポーネント: { アプリ },
    テンプレート: '<App/>'
})

main.jsの状態を取得して新しいstore/state.jsを作成することもできます。

エクスポートデフォルト{
    カウント: 0
}

そしてindex.jsを次のように変更します。

//vuex は import Vue from 'vue' を使用します
'vuex' から Vuex をインポートします
'./state' から状態をインポートします

Vue.use(Vuex)

デフォルトの新しいVuex.Storeをエクスポートします({
    状態: 状態、
    //状態メソッドの変更: {
        //状態は上記の状態です
        データを追加(状態) {
            //状態の変更 state.count++
        }
    },
    //フィルターゲッター: {
        getState(状態) {
            状態数 >= 5 の場合
                戻る 5
            } それ以外 {
                状態.countを返す
            }
        }
    },
    アクション: {
        //アクショントリガーミューテーションメソッドの利点は非同期処理です。addData(context) {
            //非同期の setTimeout(() => { をシミュレートする
                コンテキスト.commit('addData')
            }, 1000)
        }
    }
})

要約する

これで、vue初心者向けのvuexのインストールと使い方に関する記事は終了です。vuexのインストールと使い方についてさらに詳しく知りたい方は、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vuexの最も詳細な概要
  • Vuex クイックスタート(わかりやすい)
  • Vuex 入門チュートリアル
  • シンプルな3ステップのVuex導入
  • Vuex 入門チュートリアル
  • 数分で Vue での Vuex の応用を学ぶ (初心者向けチュートリアル)
  • Vuex の簡単な紹介
  • Vue.js 実践的 Vuex 入門チュートリアル
  • Vuex の使い方入門チュートリアル

<<:  GoのDockerデプロイメント用の基本イメージ2つの実装

>>:  Linux で MySQL データベースのデータ ファイル パスを変更する手順

推薦する

HTML のテキストエリアの改行問題の概要

最近、Textrea に転送したときに、データが本当に行ごとに保存できるかどうかという問題に遭遇しま...

MySQL の中国語文字化け問題の解決方法

1. LinuxのMySQLで中国語の文字化けが発生する。以下の操作を実行する。 vi /etc/m...

Mysqlマスタースレーブ同期の実装原理

1. MySQL マスター/スレーブ同期とは何ですか?マスター データベースのデータが変更されると、...

Windowsにmysql5.7をインストールする方法

まずmysqlの圧縮バージョンをダウンロードします。公式ダウンロードアドレスは123WORDPRES...

Docker で Kong API Gateway をインストールして使用する詳細なチュートリアル

1 はじめにKong は単純な製品ではありません。この記事で言及されている Kong は主に Kon...

DockerにMinIOをインストールするための詳細な手順

目次1. docker環境が正常かどうかを確認する2. miniIOイメージをダウンロードする3. ...

MySQL データ定義言語 DDL の基本ステートメント

MySQL DDL ステートメントDDL、DMLとは何ですか。 DDL はデータ定義言語であり、CR...

Vue-cli4 ルーティング構成の詳細な理解

目次序文 - Vue ルーティング1. 最も基本的なルーティング構成1. router/index....

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

MySQLの行数カウントに関する簡単な説明

各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...

Xmeter APIインターフェーステストツールの使用状況の分析

XMeter API は、以下のサービスを含む、JMeter に基づくワンストップのオンライン イン...

Dockerスペースがいっぱいでコンテナに入れない場合の解決策

トラブル発生が突然で、業務も迫っていたため、現場のスクリーンショットを撮る時間がありませんでしたので...

jQueryはアコーディオン効果を実装します

この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...

Dockerにelasticsearchとkibanaをインストールする方法

Elasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを知らないと軽蔑...

MySQL レプリケーション メカニズムの原理の説明

背景レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶの...