Vuex启用命名空间后调用action报unknown action type: getPackagingList错误
问题根因
getPackagingList属于开启了命名空间的packaging子模块,默认mapActions不传命名空间参数时只会从根store查找对应action,因此无法匹配到子模块内的action,触发报错。
解决方案
- 方案1:调用
mapActions时指定命名空间(改动最小,最常用)
直接修改组件内的mapActions写法,第一个参数传入子模块名packaging即可,原有调用逻辑无需调整:
methods: { // 第一个参数为子模块名称,第二个参数为要映射的action数组 ...mapActions('packaging', ['getPackagingList']), }
- 方案2:手动带命名空间触发action
如果不使用mapActions辅助函数,直接通过$store调用时需要加上模块名前缀:
mounted() { this.$store.dispatch('packaging/getPackagingList') }
- 方案3:使用命名空间辅助函数
如果组件内需要频繁调用该模块的state、getters、actions、mutations,可以用createNamespacedHelpers创建绑定了指定命名空间的辅助函数,后续使用无需重复传命名空间参数:
import { createNamespacedHelpers } from 'vuex' // 生成绑定了packaging模块的辅助函数 const { mapActions } = createNamespacedHelpers('packaging') export default { // 其他组件配置 methods: { ...mapActions(['getPackagingList']) } }
额外避坑提示
根store配置的namespaced: true是无效属性,只有子模块的namespaced配置才会生效,你可以把根store里的这个配置删掉避免后续混淆。
内容的提问来源于stack exchange,提问作者albertyaz
相关产品推荐
相关产品推荐

