1

tl;博士

如何从参数化的 getter 访问其他 getter?通常,您可以使用this.myGetter; 但是参数化的 getter 实现为箭头函数,其中this未定义。在 Pinia 中处理这种情况的首选方式是什么?


我想multiSum在我的 Pinia 商店中创建一个参数化的 getter (),它可以访问另一个 getter ( sum)。

Getter 可以通过 访问this,但这在用于实现参数化 getter 的箭头函数中不起作用:因为在嵌套箭头函数的上下文中而multiSum崩溃。thisundefined

getters: {
  sum: (state) => state.a + state.b,
  multiSum: (state) => (count) => this.sum * count // crash: this is undefined
}

在 Vuex 中,参数化的 getter 可以通过参数而不是 来访问其他 getter this,这也适用于箭头函数。但是 afaik 这个 API 在 Pinia 中不存在。

我可以通过捕获 store 实例来解决这个问题:

multiSum(state) {
  const store = this
  return (count) => store.sum * count
}

这有效,但非常冗长。有没有更好(更符合框架)的方法来做到这一点?

4

1 回答 1

1

this可以undefined在箭头函数内部,因为它不能与常规函数互换,并且从父作用域获取上下文。

this和的用法在文档state中有详细说明。要么 要么可以使用,但具有更好的 Typescript 和 IDE 支持。thisstatethis

在第一个片段中,state已经在函数范围内可用,无需访问this

multiSum: (state) => (count) => state.sum * count

在第二个片段中,const store = this不需要,因为商店已经是this.

multiSum() {
  return (count) => this.sum * count
}
于 2022-02-06T17:16:20.147 回答