我有一个vuex状态,看起来像这样:
state: {
myObj: {someArrayAttribut: [...], ...}
}
在我的组件中:
computed: {
...mapState("module", [myObj])
},
methods: {
remove(i) {
this.myObj.someArrayAttribut.splice(i, 1)
}
}
该方法删除了作品,但效果很好,但是vuex文档明确指出,The only way to actually change state in a Vuex store is by committing a mutation.
当我可以直接在组件中更新状态时,我觉得我浪费了很多时间来声明突变。
那么我做的事怎么了?
引擎盖下Vuex
使用与Vue
相同的反应系统。因此,任何会在Vue中触发更新的事物都会在Vuex中触发更新。
Array.splice
和其他情况就是这样。
您不应该从外部突变更新状态的主要原因是,突变还可以确保数据完整性。
通过直接更新状态,您会失去这一点,并尝试调试类似的问题,这是很大的痛苦。