我有一个Vuex吸气剂,可以从应用程序中的各个组件调用它。但是,我发现一个案例在调用getter之前需要稍微复杂一点的逻辑,因此我使用了Vuex Action。如何从我的操作中使用参数调用getter函数?
我使用常量来命名getter / mutations / actions,因此我的getter定义如下:[GETTER_NAME]: state => param => { return {/.../} }
。在我的Vuex动作中,我想按getters[GETTER_NAME](someParam)
调用getter。但是,这似乎不起作用(即使getters[GETTER_NAME]
返回一个函数)。
从组件调用getter可以很好地工作。我只是创建computed
函数并使用...mapGetters({getterName: GETTER_NAME})
。要使用参数调用getter,我只说getterName(someParam)
。
[GETTER_NAME]: state => param=> {
return {/.../}
},
[ACTION_NAME]: (context, param) => {
getters[GETTER_NAME](param)
? context.commit(MUTATION_X, param)
: context.commit(MUTATION_Y, param);
}
getter被调用,但是,它返回函数而不传递参数。我是在做错什么还是我误解了Vuex中吸气剂的工作方式?
答案 0 :(得分:3)
您需要在context.getters[GETTER_NAME](someParam)
内像actions
一样拨打电话。
[GETTER_NAME]: state => param=> {
return {/.../}
},
[ACTION_NAME]: (context, param) => {
context.getters[GETTER_NAME](param)
? context.commit(MUTATION_X, param)
: context.commit(MUTATION_Y, param);
}
答案 1 :(得分:1)
在动作中注入了参数:dispatch
,commit
,getters
和rootState
。因此,您可以像这样访问getter:
ACTION_NAME: ({ commit, getters }, payload) => {
let MY_VARIABLE = getters.GETTER_NAME(payload)
console.log(MY_VARIABLE)
}
即使您尝试从其他模块访问getter,此方法也可以正常工作。
尽管您可以通过context.getters
将getter与上下文一起使用,但是以这种方式使用时,语法在操作内部会有点冗长。