2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Vuex】action 内で,別の module の action を呼び出すときの注意点

Posted at

Vuex の action 内で,別の module の action を呼び出したい場合に,思いがけず詰まったので共有させていただきます!

エラー発生

stockModule 内の createStock アクション内から, quizModule の fetchQuizList アクションを呼び出すために,以下のようなコードを書きました.


const stockModule = {
  namespaced: true,
  actions: {
    createStock(context, payload) {
     // 以下略
     context.dispatch("quiz/fetchQuizList", { root: true }); // 注目
    }
  }
};

const quizModule = {
  namespaced: true,
  actions: {
    fetchQuizList(context) {
      // 以下略
    }
  }
};

const store = new Vuex.Store({
  modules: {
    stock: stockModule,
    quiz: quizModule,
  },
});

export default store;

すると,このようなエラーが出てしまいました!! {root: true} でグローバル空間を指定しているはずなのに,なぜ unknow local action type と言われるのか,2 時間くらい悩んでしまいました 涙

unknown local action type: quiz/fetchQuizList, global type: stock/quiz/fetchQuizList

原因

dispatch は ,
第一引数:アクション名
第二引数:payload
を指定しなければいけないという基本的なことがわかっていませんでした.

context.dispatch("quiz/fetchQuizList", { root: true }); // 注目

の引数の指定の仕方が間違っていました.dispatch の第二引数には payload が入るので,
このままだと,stock/quiz/fetchQuizList というアクションに,{ root: true } というpayload を渡してしまいます!

解決

今回は,stock/quiz/fetchQuizListに渡したい payload は無いので,下のように第二引数に null, 第三引数に {root: true} を指定すると上手く呼び出せるようになりました!

context.dispatch("quiz/fetchQuizList", null, { root: true }); // 注目

まとめ

dispatch は ,
第一引数:アクション名
第二引数:payload
を必ず指定し, {root: true} は第三引数で指定するということを学びました!!

参考記事

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?