Javascript Vuex:如何在状态中存储getter的结果?
我的Vuex.商店有问题: 我想使用两个状态条目作为搜索条件(state.array和state.selected)和一个getter来获取一个对象(getter.getRecipe)。然后,我希望将该结果存储在我的状态(state.recipe)中,以便能够在组件中更新它(即,根据客户端操作更改配方对象的一个键)。 但是,我不知道如何在我的状态中存储getters的结果(“this.getters.getRecipe”不起作用…)。 非常有帮助的提示。非常感谢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
//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就像计算属性一样被缓存。因此,您不需要额外的状态属性。您可以使用gettergetRecipe
@Derek-thx快速响应。关键是,我需要一个结果(即对当前状态的操作),然后以某种方式将该结果保存到状态中。我该怎么做呢?只要getter依赖的属性发生更改,getter就会自动更新。因此,在您的情况下,state.array
或state.selected
更改将导致getter更新。Thx大量Derek。你帮我弄清楚我的方法违背了一些原则。从这里开始,我可以继续,因为我的例子当然更复杂。继续之后,可能会再次发布更具体的问题。我的关键问题不是获取数据,而是首先根据一个组件(state.selected)中的客户选择计算数据,然后通过另一个组件为客户提供再次操作该数据的机会(当然存储在store中。THX MAN!