Javascript Vuex:如何在状态中存储getter的结果?

Javascript Vuex:如何在状态中存储getter的结果?,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,我的Vuex.商店有问题: 我想使用两个状态条目作为搜索条件(state.array和state.selected)和一个getter来获取一个对象(getter.getRecipe)。然后,我希望将该结果存储在我的状态(state.recipe)中,以便能够在组件中更新它(即,根据客户端操作更改配方对象的一个键)。 但是,我不知道如何在我的状态中存储getters的结果(“this.getters.getRecipe”不起作用…)。 非常有帮助的提示。非常感谢 //store.js (vuex

我的Vuex.商店有问题:

我想使用两个状态条目作为搜索条件(state.array和state.selected)和一个getter来获取一个对象(getter.getRecipe)。然后,我希望将该结果存储在我的状态(state.recipe)中,以便能够在组件中更新它(即,根据客户端操作更改配方对象的一个键)。 但是,我不知道如何在我的状态中存储getters的结果(“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]
   }
 }
})
相反,您应该使用:

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

一个基本的例子:

getters: {
  // ...
  getTodoById: (state) => (id) => {
    return state.todos.find(todo => todo.id === id)
  }
}
然后,使用以下示例:

store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }
或者,从组件内部:

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

通过这种方式,您可以确保您的状态仍然是一个纯数据结构,遵循flux模式规定的单向数据流。

您不需要这样做,这是违反直觉的。你的状态就是你的状态,你的getter就是getter。相反,你应该像getter一样使用
getter
,并且从你的状态获取数据getter就像计算属性一样被缓存。因此,您不需要额外的状态属性。您可以使用getter
getRecipe
@Derek-thx快速响应。关键是,我需要一个结果(即对当前状态的操作),然后以某种方式将该结果保存到状态中。我该怎么做呢?只要getter依赖的属性发生更改,getter就会自动更新。因此,在您的情况下,
state.array
state.selected
更改将导致getter更新。Thx大量Derek。你帮我弄清楚我的方法违背了一些原则。从这里开始,我可以继续,因为我的例子当然更复杂。继续之后,可能会再次发布更具体的问题。我的关键问题不是获取数据,而是首先根据一个组件(state.selected)中的客户选择计算数据,然后通过另一个组件为客户提供再次操作该数据的机会(当然存储在store中。THX MAN!