Typescript Vuex - 如何使用 setter 和 getter 定义状态?

Posted

技术标签:

【中文标题】Typescript Vuex - 如何使用 setter 和 getter 定义状态?【英文标题】:Typescript Vuex - How to define a state with a setter and getter? 【发布时间】:2019-10-18 10:12:21 【问题描述】:

在 vuex 存储中,我想初始化一个名为 _token 的状态。当我尝试访问同一类中的属性时,它给了我一个错误消息,即 _token 的设置器未定义。任何人都知道为什么只有 getter 可用?

export default class Api extends VuexModule 
  public _token = '';

  @Action
  public async [VuexActionsApi.VerifyUser](data: any): Promise<IResponseState> 
    const vuexInstance = this;

    // this is not working
    vuexInstance._token = "test";

【问题讨论】:

【参考方案1】:

如果你要使用类装饰器,那么你必须像这样导入它们(并安装包):

import Action from 'vue-class-component'

虽然我可能会建议不要使用该语法,因为它在 vue3 中已被弃用,请参见此处: https://github.com/vuejs/rfcs/pull/17#issuecomment-494242121

【讨论】:

我从包“import Action, Module, VuexModule from 'vuex-module-decorators';”中导入了类装饰器这个包也被 vue3 弃用了吗?您建议哪种替代方案? 不,没关系,它只是不会在 vue3 中得到官方支持(你应该仍然可以使用该包。 所以没有官方的typescript vue支持?感谢您的帮助:) 我现在已经看到 typescript 装饰器将被构建到 Vue 3.0 中。所以我上面的问题不再相关了:)【参考方案2】:

当我这样定义状态时,它现在似乎可以工作了:

public data = 
  bearerToken: undefined
;

现在 setter 和 getter 函数已正确创建。有人知道为什么第一种方法不起作用?

【讨论】:

以上是关于Typescript Vuex - 如何使用 setter 和 getter 定义状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vuex 4 和 TypeScript 中使用其他存储模块 getter/actions/mutations

如何使用 vuex 和 typescript 将 axios 调用移动到自己的方法中

Typescript Vuex - 如何使用 setter 和 getter 定义状态?

在 Vue 3 中使用 Vuex 4 模块和 TypeScript,以及如何修复循环依赖 linting 错误?

如何从 javascript/typescript 模块文件(导入/导出)访问 Vuex 商店?

如何在单独的非 Vue 组件、JavaScript/TypeScript 文件中访问 Vuex 状态?