Vue.jsアプリケーションにおけるVuexの基本的な活用方法

Vuexの概要と導入のポイント

VuexはVue.js専用の状態管理ライブラリであり、複数のコンポーネント間で共有可能なアプリケーション全体の状態を一元管理するために設計されています。特に中規模から大規模なアプリケーションにおいて、コンポーネント間のデータ共有や状態管理を効率的に行うために有用です。

Vuexのコアコンセプト

  • state: アプリケーション全体の状態を保持する
  • mutations: 状態を変更するためのメソッド(同期処理のみ)
  • actions: 非同期処理を含むロジックを実行し、mutationsを呼び出す
  • getters: stateから派生した値を算出する

Vuexストアの作成と構成

Vuexの中心となるのはストア(store)のインスタンスです。以下のようにVueとVuexをインポートした上でストアを生成します。


import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    progress: 0,
    items: [],
    isCompleted: false
  },
  mutations: {
    updateProgress(state, value) {
      state.progress = value;
    },
    completeTask(state) {
      state.isCompleted = true;
    }
  },
  actions: {
    fetchItems({ commit }) {
      // 非同期処理の例
      setTimeout(() => {
        commit('updateProgress', 100);
        commit('completeTask');
      }, 1000);
    }
  },
  getters: {
    progressPercentage: state => state.progress + '%'
  }
});

VueインスタンスへのVuexストアの注入

作成したVuexストアをVueアプリケーションに組み込むには、Vueインスタンス生成時にstoreオプションとして渡します。


import Vue from 'vue';
import App from './App.vue';
import store from './store'; // 別ファイルで定義したストアをインポート

new Vue({
  el: '#app',
  store, // ストアを注入
  render: h => h(App)
});

コンポーネントからのストアアクセス方法

コンポーネント内では、this.$storeを通じてストアにアクセスできます。computedプロパティと組み合わせることで効率的な状態取得が可能です。


computed: {
  progressText() {
    return this.$store.getters.progressPercentage;
  }
},
methods: {
  startLoading() {
    this.$store.dispatch('fetchItems');
  }
}

グローバル状態とローカル状態の使い分け

すべての状態をVuexに置く必要はありません。以下のようなケースではコンポーネントのローカル状態として管理するのが適切です:

  • フォームの入力値
  • UIの開閉状態(ドロワー、ポップアップなど)
  • コンポーネント固有のカウンター

一方で、以下のような共有が必要な状態はVuexに格納すべきです:

  • ユーザー認証情報
  • アプリケーション全体の設定
  • 複数コンポーネント間で参照・更新が必要なデータ

タグ: vue.js Vuex state-management front-end-development

7月18日 16:55 投稿