LoginSignup
5
3

More than 3 years have passed since last update.

Vuex mutationのペイロード(引数)に複数の値を指定する

Last updated at Posted at 2020-07-15

Vuexのmutationをつかってデータ(state)を更新する際、
ペイロード(引数)の渡し方を勘違いしており、複数の値がうまく渡せませんでした。

結論

こんなふうに書きます。
※ store.jsというファイル名でvuex用のJSファイルを作り、main.jsに読み込ませています。
  stateおよびmutationはstore.jsに書いています。

mutation側

store.js
//hogeとfugaを引数にするhogehogeミューテーション
  mutations:{
    hogehoge( state, {hoge, fuga}){
      //hogeとfugaを使って色々やる処理を書く
      }
  }

コンポーネント(mutationを呼び出す)側

  methods:{
    fugafuga(){
      this.$store.commit(
        //第1引数 ミューテーション名
        "hogehoge" ,
        //第2引数 ペイロード
        { hoge : "01" ,
          fuga : "1"  }) 
    }
  }

ポイントはペイロードを{}で囲ってオブジェクトにしていることです

間違ってたこと

ペイロードを{ }で囲わず、そのまま複数並べていました。

mutation側 ダメな例

store.js
  mutations:{
    hogehoge( state, hoge, fuga){ 
//以下略

コンポーネント(mutationを呼び出す)側 ダメな例

 this.$store.commit(
  "hogehoge" ,
  "01" ,
  "1" ) 

ちなみに、これも駄目です

this.$store.commit(
  "hogehoge" ,
   {hoge : "01" },
   {fuga : "1"  })

 

まとめ

ペイロードはあくまで"第2引数"であるので、複数の値を渡す際にはオブジェクトにまとめ、「一つの引数」として渡す必要があります。
なお、公式リファレンスでも(引数の単複問わず)オブジェクト形式を推奨しています。

参考

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3