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

Vuexとaxiosを連携する

Vuex actionでローディングアイコンを表示するで、actionの処理でローディングの表示非表示を制御するmutationを実行するようにしました。

ajaxの処理が増えるたびに同じmutationを実行するように処理を入れるのは大変なので、axiosの処理でmutationを実行するようにします。

axiosにはinterceptorsという機能があり、リクエストのタイミングとレスポンスのタイミングに処理を組み込むことができます。

なので、そこでmutationをコールし、ローディングの表示非表示を切り替えれば、各actionで同じ処理を実装しなくてもよくなります。

axiosの修正

Vue.js axiosをajaxライブラリとして導入するで作成したhttp.jsを修正します。

http.js
import axios from 'axios';
import { SET_LOADING } from 'js/store/mutation-types';

const http = axios;

export default (Vue) => {
export default (Vue, { store }) => {
  http.interceptors.request.use((config) => {
    store.commit(SET_LOADING, true);
    return config;
  }, (error) => {
    // エラー処理
  });

  http.interceptors.response.use((response) => {
    store.commit(SET_LOADING, false);
    return response;
  }, (error) => {
    // エラー処理
  });

  Vue.http = http;
  Object.defineProperties(Vue.prototype, {
    $http: {
      get () {
        return http;
      }
    }
  });
};

エントリポイントの修正

http.jsではmutationをコールするためにstoreを参照していますが、今のままではstoreが参照できないため、エントリポイントのapp.jsを修正します。

webpack モジュールのパスを絶対パスで指定する方法で紹介した方法でImportは絶対パスで指定しています。

app.js
import 'less/app.less';
import Vue from 'vue';
import store from 'js/store';
import http from 'js/http';
import App from 'js/components/App.vue';

Vue.use(http);
Vue.use(http, { store }); //storeを引数に設定する

new Vue({
  el: '#app',
  store,
  render: h => h(App)
});

関連記事

  • Vuexとaxiosを連携する

    ajaxの処理が増えるたびに同じmutationを実行するように処理を入れるのは大変なので、axiosの処理でmutationを実行するようにします。axiosにはinterceptorsという機能が...


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

    actionでajaxを行うときにローディングアイコンを表示させます。Vuexのstoreにloadingの状態を持つようにします。また、mutationでloadingの状態を変更でするようにします...


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

    Vuexのactionでaxiosのライブラリを使ったajaxの処理を行います。処理の流れとして、http(axios)でajaxアクセスを行い、成功時はmutationをコールして、storeに取得...


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

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


  • async/awaitでajax(axios)処理のエラー時の処理を考える

    async,awaitを使った非同期処理(特にajax処理)の実装でエラー時の処理をどのように実装したらいいか、いろいろと調べてみました。バリデーションエラーなどの処理をcatch処理で実装するのは違...


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

    stateはmutationの処理でしか変更できません。コンポーネントからmutationを実行し、stateの値を更新する方法を紹介します。mutationを作成するにあたって、最初にmutatio...


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

    Vuexのモジュールに定義したstateを各コンポーネントで参照する方法を紹介します。各コンポーネントではthis.$store.state.モジュール名で各moduleで定義したstateを取得でき...


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

    Vuexのactionではajaxなどの非同期処理を実装しますが、非同期処理をasync,awaitで実装する方法を紹介します。特別な制御はいりません。ファンクションを定義する箇所にasyncを追加し...


  • Vue.jsにVuexを導入する

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


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

    実際にstoreを作成して、各コンポーネントでその値を参照できるようにします。mutations.jsにstateのオブジェクトを定義します。stateがアプリケーション全体の状態を管理します。