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の値を変更する方法を紹介します。


続きを表示

関連記事

  • vueコンポーネントでvue-routerのページ制御を行う

    vueコンポーネントの処理でvue-routerのページ制御を行う方法を紹介します。vue-routerでページ遷移するときはrouter-linkのコンポーネントを使うことが多いですが、コンポーネン...


  • vueファイル(単一ファイルコンポーネント)をwebpackでビルド

    vueファイル(単一ファイルコンポーネント)をwebpackでビルドする手順を紹介します。バージョンは、Vue.jsは2.x、webpackは2.xです。わかりやすくするため、空のプロジェクトから出来...


  • Vue.js lessを使いwebpackでビルドする

    .vueファイル(単一ファイルコンポーネント)のstyleをcssではなくlessで実装して、webpackでビルドをします。vue-loaderのオプションにlessのloaderを追加します。


  • vue-routerを導入してSPAを作成する

    Vue.jsのプロジェクトにvue-routerを導入してシングルページアプリケーション(spa)を作成します。最初にvue-routerのパッケージをインストールします。router-linkはナビ...


  • vue-router webpackでページごとにファイルを分割する

    vue-routerでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。ページごとにファイルを分割し、そのページがア...


  • Vue.js webpackでHot Module Replacementを行う

    開発を効率化するために、Hot Module Replacement(HMR)の設定を行います。Hot Module Replacementを設定しておけば、ブラウザの再読込は行わず、修正した箇所のみ...


  • Vue.js axiosをajaxライブラリとして導入する

    Vue.jsではajaxまわりの処理は用意されておらず、外部のライブラリを各自で自由に用意するようになっています。axiosの設定用にhttp.jsというファイルを作成します。エントリポイントのapp...


  • Vue.jsを学習する上で知っておきたいES2015の文法

    Vue.jsは公式ドキュメントを始め、ネット上のほとんどのサンプルがES2015(ES6)の表記で実装されています。Vue.jsで頻繁に使用するであろうES2015の文法を紹介します。objectの中...


  • Vue.js 独自のfilterを実装する

    Vue.jsで独自のfilterを実装して、各コンポーネントで使用できるようにします。コンポーネント内で定義することもできますが、今回はグローバルファンクションとして作成して、全てのコンポーネントで使...