ホーム > Vue > VuexのmapActionsやmapMutationsの使い方
Vue

VuexのmapActionsやmapMutationsの使い方

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

Vuex の mapActions や mapMutations の使い方についてまとめました。

⇨ Vue 記事の目次はこちら

使い方

すでに、Vuex で Actions が書かれている前提になります。

あとで詳しく書きますが、結論から書きます。

mapActions の使い方

Sample.vue

<script>
import { mapActions } from "vuex"
export default {
  methods: {
    ...mapActions("util", ["test"]),
    // utilは、module名(自由に決めて良い)
    // testはActionsに書いた関数名
  },
  created() {
    this.test() //呼び出す時、この記述だけで呼べる
  },
}
</script>

これで使うことができます。

mapMutations の使い方

<script>
import { mapMutations } from "vuex"
export default {
  methods: {
    ...mapMutations("util", ["test"]),
    // utilは、module名(自由に決めて良い)
    // testはMutationsに書いた関数名
  },
  created() {
    this.test() //呼び出す時、この記述だけで呼べる
  },
}
</script>

なぜ mapActions を使うのか

mapActions を使うことで、実際に呼び出す時に、

this.test()

と、非常にシンプルな形で呼び出すことができます。

もし mapActions を使わない場合、

Actions

methods: {
  this.$store.dispatch("util/test")
}

Mutations

methods: {
  this.$store.commit("util/test")
}

こうなります。

以上の内容で本編は終了ですが、Vuex の実装自体が検討つかない場合は、続きをご覧ください。

関連記事

Laravel に Vuex を導入する方法

Vuetify の Snackbar を Vuex で定義してどこでも使い回す方法

Vue.js で store の処理をファイルを分けて記載する方法

【rootState で解決】vuex で store をファイルで分割したあとデータの受け渡しで詰まった

Vuex の全体の実装

Vuex の全体の実装を確認していきます。

━ store
  ┣ index.js
  ┗ modules
      ┗util.js

index.js

import Vue from "vue"
import Vuex from "vuex"
import util from "./modules/util"

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    util,
  },
})

util.js

const getters = {}
const state = {}
const mutations = {
  test(state) {
    console.log("test")
    //state.test = 'test'と書いてstateを変更できる
  },
}
const actions = {
  test({ commit }) {
    console.log("test")
    // commit('test') これでMutationsのtestという関数を動かせる
  },
}

export default {
  namespaced: true, //これがないとダメ
  state,
  mutations,
  getters,
  actions,
}

Vuex の課題点

mapActions と mapMutations は非常にできることが似ています。

ですので、

  1. 呼び出す時は mapActions で呼び出す
  2. state を変更する記述だけ Mutations に書く

と決めておくことで、

「あれは、mapMutations で、あれは mapActions で・・・」と混乱しなくて済むと思います。

これはプロジェクトの方針次第だと思うので、参考程度でお願いします。

まとめ

以上です。

公式ドキュメントのここに、色々なパターン書かれている中で抜粋しています。

誰かの参考になればと思います。

苦情、誤りに関する指摘は下の Twitter の DM から頂ければ幸いです。

それでは!