好吧,我知道在js中很多事情看起来是不可能或奇怪的。但是,为什么要在使用数百万个ppl的产品中实现它们呢?
我们在吸气剂中有一个功能
export const isAuthenticated = state => (
state.auth !== null &&
state.auth.access_token !== null &&
new Date(state.auth.access_token_expiration) > new Date()
);
因此,如果这是一个函数,则应使用括号和1个参数来调用它,例如getters.isAuthenticated(state)
,但在吸气剂中却不是这种情况-getters.isAuthenticated
-没有括号,没有参数,就像属性一样,但是是一个函数调用。如果我们执行getters.isAuthenticated(arg)
,则我们的函数应类似于(state)=>(arg)=>{}
。
为什么会这样?
答案 0 :(得分:1)
实际上,您可以将getter用作here编写的函数。这就是为什么您看到(state)=>(arg)=>{}
的原因。吸气剂类似于computed
属性,它们是常规的javascript吸气剂。请在这个简单的example中检查控制台。您将看到这些道具设置为实例:
这些是基本的JS getter函数,没什么奇怪的。如果您想了解更多信息,请阅读this MDN参考。希望这对您有所帮助,并乐于学习Vue。
答案 1 :(得分:0)
它是高阶函数的变体,其中您的函数(带有状态参数)被另一个函数(没有参数)替换,该函数在调用时调用您的函数并从其自身的上下文中提供状态参数。
从源代码here,我简化了第303和425行的包装器代码
serverless.yml
在233行,您可以看到wrapdGetters作为javascript getters添加到store.getters属性中,并随store参数一起提供。再次简化了此过程,因为将吸气剂添加为计算属性,以利用值缓存。
module.forEachGetter((rawGetter, key) => {
store._wrappedGetters[key] = function wrappedGetter (store) {
return rawGetter(
local.state, // local state
local.getters, // local getters
store.state, // root state
store.getters // root getters
)
}
})