zukucode
主にWEB関連の情報を技術メモとして発信しています。

Vuex stateを作成して各コンポーネントで参照する

Vue.jsにVuexを導入するVuexの導入が完了しました。

実際にstoreを作成して、各コンポーネントでその値を参照できるようにします。

storeの作成

最初にstoreを作成します。

mutations.jsstateのオブジェクトを定義します。stateがアプリケーション全体の状態を管理します。

mutations.js
export const state = {
  message: 'hello vuex'
};

コンポーネントで参照する

各コンポーネントではthis.$storeVuexの情報が取得できます。

以下のようにApp.vueを変更してビルドすると、hello vuexと表示されます。

App.vue
<template>
  <div class="message">
    {{ message }}
  </div>
</template>

<style lang="less" scoped>
@import "~less/variables";
.message {
  color: @red;
}
</style>

<script>
export default {
  computed: {
    message: 'hello world'
    message () {
      return this.$store.state.message;
    }
  }
};
</script>

mapStateヘルパー

this.$store.state.messageと書くのは少し長くて面倒なので、ヘルパー関数が用意されています。

App.vueのスクリプトの部分を以下のように書き換えます。

App.vue
<script>
import { mapState } from 'vuex';

export default {
  computed: {
    message () {
      return this.$store.state.message;
    }
    ...mapState({
      message: 'message'
    })
  }
};
</script>

'message'というように文字列を渡すと内部的にはstate.messageと同じ扱いになります。

mapStateの箇所でエラーになってしまう場合

...Vue.jsVuexで用意された機能ではなく、オブジェクトスプレッド演算子という新しいJavaScriptの記法です。

オブジェクトスプレッド演算子はstage-3なので、babel-preset-stage-3のパッケージをインストールし、babelrcに以下のように追記する必要があります。(babel-preset-stage-3の代わりにbabel-preset-stage-2babel-preset-stage-0でもOKです)

$ npm install --save-dev babel-preset-stage-3
.babelrc
{
  "presets": [["es2015", {"modules": false}], "stage-3"]
}

Vuex mutationでstateの値を変更するstateの値を変更する方法を紹介します。


関連記事

  • Vuex 厳格(strict)モードでエラーになるよくある原因

    Vuexの厳格(strict)モードでエラーになってしまう原因でよくあるパターンです。stateに格納した配列をソートして表示するときに、stateの値をcomputedやgettersでそのままソー...


  • Vuex mutationでstateの値を変更する

    Vuex stateを作成して各コンポーネントで参照するでstateを作成して各コンポーネントで参照できるようになりました。stateはmutationの処理でしか変更できません。コンポーネントからm...


  • Vuex moduleに定義したstateをコンポーネントで簡単に取得する

    Vuexのモジュールに定義したstateを各コンポーネントで参照する方法を紹介します。以下のようにmoduleが定義されているとします。各コンポーネントではthis.$store.state.モジュー...


  • Vuexとaxiosを連携する

    Vuex actionでローディングアイコンを表示するで、actionの処理でローディングの表示非表示を制御するmutationを実行するようにしました。ajaxの処理が増えるたびに同じmutatio...


  • Vuex モジュールのactionの処理で別モジュールのactionをコールする

    Vuexのモジュール内のactionの処理で別モジュールのactionをコールする方法を紹介します。ルートのactionの場合、moduleで定義したactionをコールする場合は、以下のようにモジュ...


  • Vuex actionでローディングアイコンを表示する

    Vuex actionの処理でaxiosでajaxを行うでactionの処理を実装しました。actionでajaxを行うときにローディングアイコンを表示させます。Vuexのstoreにloadingの...


  • Vuex actionの処理で別のactionをコールする

    Vuexのactionの処理で別のactionをコールする方法を紹介します。第一引数のcontextを受取り、dispatchメソッドをコールします。dispatchメソッドの第一引数はコールしたいa...


  • Vuex actionの処理でaxiosでajaxを行う

    Vue.js axiosをajaxライブラリとして導入するでVue.jsにaxiosを導入しました。今回は、Vuexのactionでaxiosのライブラリを使ったajaxの処理を行います。最初にaja...


  • Vuex actionでの非同期処理をasync/awaitの実装をする

    Vuexのactionではajaxなどの非同期処理を実装しますが、非同期処理をasync,awaitで実装する方法を紹介します。ファンクションを定義する箇所にasyncを追加しておけば普通にawait...


  • Vue.jsにVuexを導入する

    Vuexを導入する手順の作業メモです。Vuexを利用することにより、各コンポーネントで保持していたデータをstateにまとめられるので、ある程度規模が大きくなっても耐えられるプログラムを作成できます。...