Skip to content

view 层的全局状态管理

为什么需要全局状态管理?

view 层包含树状图、抽屉列表图、size 块状图等,需要将其选中的节点状态保存在全局,以便在 view 层的各个组件中共享同步

同时还包括总依赖树、相同依赖、循环依赖等信息,各个搜索模块也需要共享。

全局状态管理的实现

使用 zustand 轻量级的状态管理库,其 apireact hooks 相一致。

ts
export interface Store {
  root: Node; // 总依赖树
  depth: number; // 总依赖树深度
  rootLoading: boolean; // 总依赖树加载状态
  collapse: boolean; // 总依赖树是否折叠

  sizeTree: boolean; // 是否显示体积树

  selectedNode: Node; // 选中的节点
  selectedCodependency: Node[] | []; // 选中的相同依赖
  selectedCircularDependency: Node | null; // 选中的循环依赖
  selectedNodeHistory: Node[]; // 选中节点的历史记录

  codependency: Record<string, Node[]>; // 相同依赖
  circularDependency: Node[]; // 循环依赖

  theme: string; // 主题
  language: string; // 语言
  // ...及其设置它们的相关方法
}
export interface Store {
  root: Node; // 总依赖树
  depth: number; // 总依赖树深度
  rootLoading: boolean; // 总依赖树加载状态
  collapse: boolean; // 总依赖树是否折叠

  sizeTree: boolean; // 是否显示体积树

  selectedNode: Node; // 选中的节点
  selectedCodependency: Node[] | []; // 选中的相同依赖
  selectedCircularDependency: Node | null; // 选中的循环依赖
  selectedNodeHistory: Node[]; // 选中节点的历史记录

  codependency: Record<string, Node[]>; // 相同依赖
  circularDependency: Node[]; // 循环依赖

  theme: string; // 主题
  language: string; // 语言
  // ...及其设置它们的相关方法
}