从Vuex动作将参数传递给Vuex getter

5
我有一个Vuex Getter,我在我的应用程序的各个组件中调用它。然而,我发现在调用getter之前需要进行略微复杂的逻辑处理,因此我使用了一个Vuex Action。如何从我的Action中带一个参数来调用Getter函数?
我为Getter/ Mutation/Action命名使用常量,因此我的Getter定义如下:[GETTER_NAME]: state => param => { return {/.../} }。在我的Vuex Action中,我想要这样调用Getter:getters[GETTER_NAME](someParam)。然而,这似乎不起作用(即使getters[GETTER_NAME]返回一个函数)。
从组件中调用Getter可以完美地工作。我只需创建一个计算函数并使用...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中getter的工作方式有误解?
2个回答

8
在此处的actions中,您需要调用类似于context.getters[GETTER_NAME](someParam)这样的语句。

[GETTER_NAME]: state => param=> {
return {/.../}
},

[ACTION_NAME]: (context, param) => {
   context.getters[GETTER_NAME](param)
     ? context.commit(MUTATION_X, param)
     : context.commit(MUTATION_Y, param);
}


4
在 actions 中注入了参数:dispatchcommitgettersrootState。因此,您可以像这样访问 getters:
ACTION_NAME: ({ commit, getters }, payload) => {
    let MY_VARIABLE = getters.GETTER_NAME(payload)
    console.log(MY_VARIABLE)
}

即使您尝试从不同的模块访问getter,此方法也能正常运行。 虽然您可以通过context.getters使用带有上下文的getter,但是在操作中使用此方法时语法会变得有些冗长。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接