Vuex:如何在状态中存储获取器的结果?

时间:2018-07-09 08:45:33

标签: javascript vue.js vuex

我的Vuex.Store出现问题

我想使用两个状态条目和一个带有吸气剂的搜索条件(state.array和state.selected)来获取一个对象(getter.getRecipe)。然后,我想将该结果存储在我的状态(state.recipe)中,以便能够在组件内进行更新(即,根据客户端操作更改配方对象的一个​​键)。 但是,我不知道如何在我的状态下存储getter的结果(“ this.getters.getRecipe”无法正常工作...)。 对提示非常有帮助。非常感谢。

//store.js (vuex store)

export const store = new Vuex.Store({
state: {
   array: [recipe1, recipe2],
   selected: 0,
   recipe: this.getters.getRecipe()
 },
getters: {
   getRecipe: (state) => {
    return state.array[state.selected]
   }
 }
})

1 个答案:

答案 0 :(得分:0)

相反,您应该使用Method style getters with arguments

  

您还可以通过返回函数将参数传递给getter。当您要查询存储中的数组时,这特别有用:

一个基本示例:

d = [('Total_RFQ', 'size'), ('Done_RFQ', lambda x: x.str.contains('Done').sum())]
df=df.groupby(['display_name','security_type1','currency_str'])['state'].agg(d).reset_index()
df['Done_Pct'] = df['Done_RFQ'] / df['Total_RFQ'] * 100
print (df)
  display_name security_type1 currency_str  Total_RFQ  Done_RFQ  Done_Pct
0            A           GOVT          USD          1         1     100.0
1            B           CORP          NZD          1         0       0.0
2            B           CORP          USD          1         1     100.0
3            C           CORP          EUR          2         1      50.0
4            C           CORP          GBP          2         2     100.0
5            C           CORP          USD          1         1     100.0

然后,使用示例:

getters: {
  // ...
  getTodoById: (state) => (id) => {
    return state.todos.find(todo => todo.id === id)
  }
}

或在组件内部:

store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }

这样,您可以确保状态保持纯数据结构,并遵循通量模式提出的一种数据流方式。