vue.js - nuxt 应用程序中的 Vuex 抛出 "Do not mutate vuex store state outside mutation handlers"!

标签 vue.js vuex nuxt.js vuex-modules

在我的 NUXT 应用程序中,我正在使用 vuex 存储模块!当我运行应用程序并调用时

this.$store.dispatch('userStore/setLoggedInUser',currentUser); //default.vue

我收到一个无限循环的错误消息“不要在突变处理程序之外改变 vuex 存储状态”!

我的模块是这样的:

const actions = {
  setLoggedInUser({commit},currentUser){
    return new Promise((resolve,reject)=>{
      commit('mutateLoggedInUser',currentUser);
      resolve();
    });
  }
}

const mutations = {
  mutateLoggedInUser(state,user){
    state.loggedInUser = user;
  }
}

我找到了一个解决方案(某种程度上)。 通过在 store/index.js 文件中将严格模式设置为 false,错误就会消失。

export const strict = false

但这似乎是一个 hacky 解决方案,我真的不明白发生了什么。这是 NUXT 中的错误还是我在我的 vuex 商店中做了一些奇怪的事情?

最佳答案

如果您在某处观察传入的值导致无限更新循环,通常会发生此错误,但如果您没有观察,则可能是因为您传入的是原始值而不是副本。

尝试改变: state.loggedInUser = userstate.loggedInUser = user.slice() 或者 this.$store.dispatch('userStore/setLoggedInUser',currentUser.slice())

关于vue.js - nuxt 应用程序中的 Vuex 抛出 "Do not mutate vuex store state outside mutation handlers"!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51686555/

相关文章:

javascript - 克隆单个文件 Vue 组件(模板和功能)

javascript - vue.js调用外部js函数进行搜索

vue.js - Vuex 绑定(bind)的 Vue : computed vs data(),?

vue.js - Vuejs - 如何在点击时进行 v-for 循环

webpack - 如何为脚本和样式标签添加随机数以避免 'unsafe inline' CSP header 字段?

javascript - Bootstrap-vue 延迟加载显示旧图像

vue.js - 如何测试返回文档元素的 Vue.js 插件函数?

facebook-graph-api - Vue JS 中的开放图元标记不显示图像

vue.js - 如何在 Vuex 中为 mapbox map 设置集中状态?

javascript - Nuxt.js 模块中未定义 process.server