我在Vuex舱里有个吸气器。我用mutator改变值,状态属性改变,但是getter属性仍然是一样的,它没有反应。
然后,当我试图将吸气剂移到主要的Vuex商店时,它是反应性的,而且工作正常。我不知道为什么模块没有反应?
这里是Vuex商店:
import {mymodule} from './vuex-modules'
export default new Vuex.Store({
modules: { mymodule },
getters: {},
mutations: {
updateState(state, payload) {
this.state[payload.stateName] = payload.newValue;
},
},
})和模块:
export const mymodule = {
state: {
myproperty: ['defaultvalue'] //<-- the property is in the module's state
},
getters: {
myproperty: state => state.myproperty //<-- getting myproperty from local state
},
}在组件中,我有一个带有mapGetters的计算属性:
computed: {
...mapGetters({
myproperty: 'myproperty'
}),我从组件中提交(在突变中调用updateState ):
let object = { stateName: 'myproperty', newValue:'newelement' }
this.$store.commit('updateState', object);Vuex状态更改,但计算的属性不变。
我可以简单地将getter从模块移动到Vuex商店:
export default new Vuex.Store({
modules: { mymodule },
getters: {
myproperty: state => state.myproperty
},现在它起作用了,计算属性myproperty取而代之的是“Now”。有什么问题吗?
更新
所以我不能在突变中使用this.state[payload.stateName],我必须指定它位于哪个模块中。但我怎样才能使它充满活力呢?我以为它就像混合器,在那里被合并在一起。
是否有一种方法可以针对mutator中的状态属性,而不必指定它可能在其中的模块?
否则,我就不能有一个对主状态和模块都很常见的mutator。
发布于 2020-08-07 22:56:32
我现在已经了解到,mutator没有访问模块的属性,它只是访问它自己的状态属性。因此,当目标属性在模块内时,它正在向主状态添加一个新属性。
所以这个:
mutations: {
updateState(state, payload) {
state[payload.stateName] = payload.newValue;
},应:
state.mymodule[payload.stateName] = payload.newValue;所以我想这就是事情发生的原因。但我有一些东西要加在编辑问题上。
https://stackoverflow.com/questions/63308106
复制相似问题