我很难理解以下 JS:
const store = new Vuex.Store({
state: {
todos: [
{ id: 1, text: '...', done: true },
{ id: 2, text: '...', done: false }
]
},
getters: {
// ...
getTodoById: (state) => (id) => {
return state.todos.find(todo => todo.id === id)
}
}
})
store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }
这两个代码片段取自 Vuex 官方文档 on Method Style Access for Getters。
现在我不明白的是,代码的第二部分如何输出注释中的值?可能是我没看懂 JS 函数?
我相信输出将是:
(id) => {
return state.todos.find(todo => todo.id === id)
}
所以实际上是返回的第二个函数,因为在它们使用的调用中,我没有看到两个 '()()'
,我也不知道函数从哪里接收 'state'
变量。< /p>
我想请您解释一下,是我没有理解 JS 中的某些内容,还是 Vuex 特定的内容?
答案 0 :(得分:2)
请参阅这里的咖喱箭头函数示例:https://stackoverflow.com/a/32787782/11375753
然而,当我们考虑到 vuex getter 方法时,它的工作原理如下。
getters: {
getTodoById: (state) => (id) => {
return state.todos.find(todo => todo.id === id)
}
}
getToboById
的属性中定义了一个函数。(id) => {}
中。这将是我们的论点。(state)
部分。如果我们在不争论的情况下使用常规的 getter。我们始终可以访问 state
参数。 Vuex 为每个 getter 函数提供了这一点。store.getters.getTodoById(2)
。你实际上是在做store.getters.getTodoById()(2)
。在第一个函数调用中,您将已经包含状态。所以,总结一下:
这个函数调用 store.getters.getTodoById()
将返回一个函数。我们可以用我们的论点再次调用它。
根据链接的示例将如下所示:
getTodoById: function(state) {
return function(id) {
return state.todos.find(todo => todo.id === id);
}
}