当前位置:   article > 正文

nuxt 使用vuex错误:Do not mutate vuex store state outside mutation handlers._nuxt [vuex] do not mutate vuex store state outside

nuxt [vuex] do not mutate vuex store state outside mutation handlers.

场景
项目A升级改造,需要用到另一个B项目的其中一个模块,A项目使用的是nuxt,而B项目使用的是原生vue, 合并的时候,直接将B项目对应的store文件复制到了A项目的store目录下,运行时,报错:
Do not mutate vuex store state outside mutation handlers.

分析
我们都知道无论是vuex,redux还是mobx,都有严格模式和非严格模式,区分就是能不能直接修改store到处的state,严格模式下是不允许的,只能通过action,mutation去修改,而非严格模式下才可以直接修改state数据。上面报错就是因为在严格模式下直接修改了state数据。

解决
分析了原因之后,着手解决,因为nuxt默认在开发模式的时候开启严格模式,打开nuxt官网,搜索到所有严格模式相关的内容如下

默认情况下,在开发模式下启用严格模式,在生产模式下关闭模式。要在dev中禁用严格模式,请遵循以下示例。

Module Mode
export const strict = false
  • 1
  • 2
  • 3
  • 4

于是我在从B项目引入的模块文件下加入:

export const strict = false
  • 1

我的想法是,因为这个模块有state被直接修改,那个申明这个模块为非严格模式。

保存,重启项目,继续报错。

无奈继续寻找原因,后来看见有人说:

要在store/index.js添加export const strict = false

突然明白了,在原生的vuex配置重,strict这个配置是在new Vuex.Store()是传入的配置,而modules中并没有这个配置项,也就是说,要么整个store都是严格模式,要么都是非严格模式,不存在一个模块是严格模式,另一个模块是非严格模式这种操作,但是nuxt中并没有提供我们配置store的地方,store/index.js的配置应该就是对应store的顶级配置吧。
查看了我的目录结构,发现并没store/index.js文件,于是新建store/index.js,添加

export const strict = false
  • 1

保存,重启,错误消失。
但是此时整个store都是非严格模式,并不是优雅的解决方案,建议开发环境下还是使用严格模式。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/516191
推荐阅读
相关标签
  

闽ICP备14008679号