如何使用redux维护具有子应用程序(选项卡)副本的应用程序的状态—同时仍允许访问全局状态

如何使用redux维护具有子应用程序(选项卡)副本的应用程序的状态—同时仍允许访问全局状态,redux,react-redux,Redux,React Redux,背景 我正在创建一个用于查询数据库连接的应用程序。每个连接可以有多个选项卡,每个选项卡都有一个独立的状态,其中包含查询、自定义选项以及最终的数据库结果。每个子应用程序或选项卡的复杂性都相当高,因此我最初考虑根据redux文档隔离我的子应用程序: 然而,我遇到的问题是,我无法访问我的“全局”状态(在我的例子中是数据库连接) 因为这不起作用,所以我尝试使用React钩子初始化一个单独的redux实例。这是可行的,但当用户导航到应用程序的其他部分并打算返回到以前的状态时,实际上不会保存我的应用程序 问

背景

我正在创建一个用于查询数据库连接的应用程序。每个连接可以有多个选项卡,每个选项卡都有一个独立的状态,其中包含查询、自定义选项以及最终的数据库结果。每个子应用程序或选项卡的复杂性都相当高,因此我最初考虑根据redux文档隔离我的子应用程序:

然而,我遇到的问题是,我无法访问我的“全局”状态(在我的例子中是数据库连接)

因为这不起作用,所以我尝试使用React钩子初始化一个单独的redux实例。这是可行的,但当用户导航到应用程序的其他部分并打算返回到以前的状态时,实际上不会保存我的应用程序

问题

管理也可以引用全局状态的独立redux状态容器的最佳实践是什么?我知道这有点高,如果需要,我很乐意详细说明细节/示例代码

还可以引用全局状态的redux状态容器


如果您需要访问全局状态,那么我将继续使用Redux reducer组合。

通过规范我的状态结构,最终解决了这个问题:

展平数据结构后,我的新状态如下所示:

export interface QueryTabsState {
  readonly byId:  { [key: string]: QueryTabState }
  readonly allIds : string[]
  readonly activeId?: string
}

export interface QueryTabState {
  readonly id: string
  readonly title: string
}

export interface QueryState {
  readonly tabId: string
  readonly query: any
  readonly searchFilter: string
  readonly includeDeleted: boolean
  readonly toolingMode: boolean
  readonly errors?: any
  readonly paginationConfig: PaginationConfig
  readonly parsedQuery?: any
  readonly batchSize: number
}

export interface QueryResultState {
  readonly tabId: string
  readonly data: any
  readonly filteredIds: string[]
  readonly selectedIds: string[]
  readonly totalSize: any
  readonly pending: boolean
  readonly dmlPending: boolean
  readonly errors?: any
}

现在,在切换选项卡时,我可以查找对activeId的更改,然后独立获取每个组件的。有助于简化这一点。

目前,我的全局状态使用Redux+孤立Redux容器的挂钩的混合。主要问题是每个“隔离容器”都有多个减速器和传奇。因此,试图在单个全局数组属性中维护所有这些内容似乎不可伸缩。为什么它不可伸缩?假设我有一个名为
queryTabs:[]
的属性
ApplicationState
,每个数组项都是查询字符串和结果的简单状态。每个结果的查询都由sagas处理,因此我可以取消中间查询并处理返回的其他结果,因为这个特定的数据库(Salesforce)一次只允许我重新筛选200条记录。使用单个属性,所有这些操作都必须存在于一个reducer、action和saga中。现在我需要添加其他有状态特性:过滤、分页、查询配置、数据库操作(更新/删除)。很快,这就失控了。我想要的是将这些特性构建到单独的简化程序、操作、传奇和类型中,以提供一个清晰的关注点分离(我目前正在这样做)。我不知道如何将这些东西作为数组移动到全局状态并保持这种分离