Vuex - 模型嵌套模块'依赖

时间:2018-06-05 13:37:34

标签: typescript vue.js module dependencies vuex

我的应用程序状态中的属性之间存在依赖关系,我不知道如何在Vuex中表达。

用户可以登录,然后选择要连接的多个工作区之一。显然,如果他没有登录,他就无法连接到工作区。工作空间对登录的依赖性是我遇到的问题。

"蛮力"这项工作的方法是在每次访问工作区数据之前手动检查用户是否已登录。但是,这个检查很容易忘记,这就是为什么我想要这样的替代方案:
如果我可以将工作空间嵌套为会话的属性,我可以强制商店的用户在访问工作空间之前检查会话是否存在(例如,使用TypeScript' s严格模式)。

type State = {
  session?: {
    userInfo: {username: string},
    workspaceInfo: {workspaceId: string},
  }
}

通过严格的设置,TypeScript会在访问state.session.workspaceInfo时发出警告,而不会确保session已定义。这是我感到满意的解决方案。

不幸的是,我不知道如何在Vuex中代表这一点,因为我不能"筑巢"国家内部的子模块,也不制作模块"可选"在某种意义上它可能是未定义的。

是否有解决方案可以在Vuex中对此依赖关系进行建模?

1 个答案:

答案 0 :(得分:0)

只需经历与此类似的问题,并且由于缺少有关此问题的明显文档,因此尝试了不同的尝试。从实验来看,以下方法似乎有效:

export interface RootState {
  moduleA: ModuleAState;
  moduleB: ModuleBState;
}

export interface ModuleAState {
  valueA: string;
}

export interface ModuleBState {
 valueB: string;
}

这允许您使用state.moduleA.valueA

访问命名空间状态