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 データベースのデータ ファイル パスを変更する手順

推薦する

Vant Uploaderは1枚以上の写真をアップロードするコンポーネントを実装します

この記事では、1枚以上の写真をアップロードするためのVant Uploaderコンポーネントを紹介し...

ページの下部にHTMLフッターを配置する簡単な方法

要件:ページ コンテンツが短く、ブラウザーの高さをサポートできない場合でも、フッターをウィンドウの下...

Jenkins + Docker + ASP.NET Core の自動デプロイメントの問題について (落とし穴を避ける)

このブログを書くつもりはなかったのですが、実際の操作中に、ネットワークの問題に圧倒されたこと (ネッ...

Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

目次1. レンダリング2. データをバインドし、ツリーテーブルにラベルを追加する3. すべてのコード...

データベースアカウントのパスワード暗号化の詳細な説明と例

データベースアカウントのパスワード暗号化の詳細な説明と例データベースアカウントとパスワードはデータベ...

Linux システムで TCP 接続を作成するプロセスの紹介

目次LinuxでTCPを作成する手順サーバクライアントTCP確立プロセスサンプルコードLinuxでT...

初心者向けのHTMLタグネストルールの詳細なまとめ

最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...

Linux trコマンドの使い方

01. コマンドの概要tr コマンドは、標準入力からの文字を置換、圧縮、削除できます。ある文字セット...

CSS を解析して画像のテーマカラー機能を抽出する (ヒント)

背景すべては、WeChat 技術グループのクラスメートが「写真の主な色を取得する方法はあるか」と尋ね...

Vueエンジニアがカプセル化しなければならない埋め込み命令の知識のまとめ

目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...

CSS 背景画像を設定するための 6 つの興味深いヒント

background-image は、おそらくすべてのフロントエンド開発者がキャリアの中で少なくとも...

JQueryはアニメーション効果の非表示と表示を実装します

この記事では、アニメーション効果の非表示と表示を実現するためのJQueryの具体的なコードを参考まで...

NavicatがMySQLに接続すると、10060、1045エラーとmy.iniの場所が報告されます。

Navicat は、データベースに接続するときにエラー 10060 および 1045 を報告します...

MySQL 自動インクリメント ID 枯渇の例

ディスプレイ定義IDテーブルに定義された自動増分IDが上限に達した場合、次のIDを申請する際に得られ...