从参数化 getter 访问 getter
Accessing a getter from a parameterized getter
tl;dr
如何从参数化的 getter 访问其他 getter?
通常,您可以使用 this.myGetter
;但是参数化的 getter 是作为箭头函数实现的,其中 this
是未定义的。
在 Pinia 中处理这种情况的首选方法是什么?
我想在我的 Pinia 商店中创建一个参数化的 getter (multiSum
),它访问另一个 getter (sum
)。
Getter 可以通过 this
访问,但是在用于实现参数化 getter 的箭头函数中不起作用:multiSum
崩溃,因为 this
在嵌套箭头函数的上下文中是 undefined
。
getters: {
sum: (state) => state.a + state.b,
multiSum: (state) => (count) => this.sum * count // crash: this is undefined
}
在 Vuex 中,参数化的 getters 可以通过参数而不是 this
访问其他 getters,这也适用于箭头函数。但是据我所知,这个 API 在 Pinia 中不存在。
我可以通过捕获商店实例来解决这个问题:
multiSum(state) {
const store = this
return (count) => store.sum * count
}
这可行,但非常冗长。有没有更好的(更符合框架的)方法来做到这一点?
this
可以在箭头函数中 undefined
因为它不能与常规函数互换并且从父作用域获取上下文。
this
和state
的用法在the documentation中有详细说明。可以使用 this
或 state
,但 this
具有更好的 Typescript,因此 IDE 支持。
在第一个片段中,state
在函数范围内已经可用,无需访问 this
:
multiSum: (state) => (count) => state.sum * count
在第二个片段中,不需要 const store = this
,因为商店已经 this
。
multiSum() {
return (count) => this.sum * count
}
tl;dr
如何从参数化的 getter 访问其他 getter?
通常,您可以使用 this.myGetter
;但是参数化的 getter 是作为箭头函数实现的,其中 this
是未定义的。
在 Pinia 中处理这种情况的首选方法是什么?
我想在我的 Pinia 商店中创建一个参数化的 getter (multiSum
),它访问另一个 getter (sum
)。
Getter 可以通过 this
访问,但是在用于实现参数化 getter 的箭头函数中不起作用:multiSum
崩溃,因为 this
在嵌套箭头函数的上下文中是 undefined
。
getters: {
sum: (state) => state.a + state.b,
multiSum: (state) => (count) => this.sum * count // crash: this is undefined
}
在 Vuex 中,参数化的 getters 可以通过参数而不是 this
访问其他 getters,这也适用于箭头函数。但是据我所知,这个 API 在 Pinia 中不存在。
我可以通过捕获商店实例来解决这个问题:
multiSum(state) {
const store = this
return (count) => store.sum * count
}
这可行,但非常冗长。有没有更好的(更符合框架的)方法来做到这一点?
this
可以在箭头函数中 undefined
因为它不能与常规函数互换并且从父作用域获取上下文。
this
和state
的用法在the documentation中有详细说明。可以使用 this
或 state
,但 this
具有更好的 Typescript,因此 IDE 支持。
在第一个片段中,state
在函数范围内已经可用,无需访问 this
:
multiSum: (state) => (count) => state.sum * count
在第二个片段中,不需要 const store = this
,因为商店已经 this
。
multiSum() {
return (count) => this.sum * count
}