【发布时间】:2018-06-26 04:26:30
【问题描述】:
我在我的 Vue 应用程序中遇到了一个我无法解释的问题。尝试更新状态的本地副本时出现以下错误。
错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态。
这是我在代码中所做的示例
import { mapGetters } from 'vuex'
export default {
name: 'sampleComponent',
data() {
return {
userModel: null
}
},
mounted() {
this.userModel = this.user
},
computed: {
...mapGetters(['getApplicationUsers']),
user() {
return JSON.parse(JSON.stringify(this.getApplicationUsers[0]))
}
},
methods: {
addUserRole() {
if (!this.userModel.userRoles.includes("newRole")) {
this.userModel.userRoles.push("newRole")
}
}
removeUserRole() {
let index = this.userModel.userRoles.indexOf("newRole");
if (index > -1) {
this.userModel.userRoles.splice(index, 1)
}
}
}
每当调用 removeUserRole 时,我都会收到突变错误。我可以使用 addUserRole 很好地添加角色,但是当我尝试删除角色时它会对我大喊大叫。
谁能向我解释这种行为?当我对状态进行深度复制时,userModel 现在不应该与状态解耦,不被 vuex 监视,并且是可变的吗?
【问题讨论】:
-
这段代码看起来不错,肯定有其他代码在改变状态。你是否不小心将
objectModel的任何子对象提交到了 Vuex 状态? -
objectModel在哪里定义?不应该在data吗?另外,如果这是一个组件,data应该是一个函数 -
菲尔 - 你是对的。我会更新问题。我可以随意复制这些数据并输入错误的数据。
标签: javascript vue.js vuex