使用VueX时unknown mutation type: XXX/XXX 报错解决方法

出现这个报错一般是在vueX的js或TS文件内引入了其它的JS文件使用,用以实现分割模块的效果,当我们调用Module内的内容时会出现unknown mutation type: XXX/XXX这种报错,下面看一下结构。 看...

出现这个报错一般是在vueX的js或TS文件内引入了其它的JS文件使用,用以实现分割模块的效果,当我们调用Module内的内容时会出现unknown mutation type: XXX/XXX这种报错,下面看一下结构。


看一下目录结构:index.js是vueX中主文件。在同级新建了liuxu.js与test.js.

attachments-2021-08-JQXoEnQj61283927c38c5.png


下面是将新建的模块文件引入的方式:

attachments-2021-08-HYoc6lRI612839b3e11a9.png


当我调用这两个模块中的mutations的时候,出现上面的报错,我的代码是这样写的

attachments-2021-08-t3VF6gUl61283a3ee27d3.png


因为分模块了,所以我要调用liuxu或者test下面的mutations,然后就报错了,但是,如过我这样写就没问题this.$store.commit(‘changeHeight’),但是如果我这样写,分模块的意义何在,研究了半天,突然看到官方文档,文档说


默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的——这样使得多个模块能够对同一 mutation 或 action 作出响应。


这时候我明白了,this.$store.commit(‘changeHeight’)是注册在全局命名空间的,如果用this.$store.commit(‘liuxu/changeHeight’) 肯定报错,怎么解决呢,官方说了,你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块,于是,我这样写了

attachments-2021-08-yXtbX7ea61283aaaa768b.png


加上namespaced: true的话,当模块被注册后,它的所有 getter、action 及 mutation 我们就可以通过以下方式来写了,例如

this.$store.commit('liuxu/changeHeight') // => liuxu/changeHeight

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

635 篇文章

作家榜 »

  1. admin 635 文章
  2. 粪斗 185 文章
  3. 王凯 92 文章
  4. 廖雪 78 文章
  5. 牟雪峰 12 文章
  6. 李沁雪 9 文章
  7. 全易 2 文章
  8. thc1214 0 文章