javascript - 从参数化的 getter 访问 getter

标签 javascript vue.js pinia

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

我想在我的 Pinia 商店中创建一个参数化的 getter (multiSum),它可以访问另一个 getter (sum)。
可以通过 this 访问 Getter ,但这在用于实现参数化 getter 的箭头函数中不起作用:multiSum崩溃,因为 thisundefined在嵌套箭头函数的上下文中。

getters: {
  sum: (state) => state.a + state.b,
  multiSum: (state) => (count) => this.sum * count // crash: this is undefined
}
在 Vuex 中,参数化的 getter 可以通过参数而不是 this 访问其他 getter ,它也适用于箭头函数。但是 afaik 这个 API 在 Pinia 中不存在。
我可以通过捕获 store 实例来解决这个问题:
multiSum(state) {
  const store = this
  return (count) => store.sum * count
}
这有效,但非常冗长。有没有更好(更符合框架)的方法来做到这一点?

最佳答案

this可以是undefined内部箭头函数,因为它不能与常规函数互换并从父范围获取上下文。this的用法和 state the documentation 中有详细说明. thisstate可以用,但是this有更好的 Typescript 和 IDE 支持。
在第一个片段中,state已在函数范围内可用,无需访问 this :

multiSum: (state) => (count) => state.sum * count
在第二个片段中,const store = this不需要,因为商店已经是 this .
multiSum() {
  return (count) => this.sum * count
}

关于javascript - 从参数化的 getter 访问 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71008104/

相关文章:

javascript - 如何在Rails 3中通过AJAX进行respond_to?

vue.js - 为什么 Apollo/GraphQL 返回一个不可扩展的对象?

javascript - vue3组件测试中如何修改pinia中state的值影响组件?

css - 带有 vue js 的 flexbox 不工作

javascript - Vue 子组件属性不起作用

vuejs3 - 在 nuxt 3 中设置 pinia 商店时遇到困难

vue.js - 为什么当 pinia 中的状态发生变化时我的 vue 组件不更新?

javascript - 创建一个较小的 div 副本?

javascript - 返回组件时如何重构&&()

javascript - 数组中的重复数字 | JavaScript