跳转到内容

状态管理

iBizHUB采用多类型的状态存储方案,依据不同的场景需求,选用合适的状态管理方式。主要涵盖 cookie、localStorage、sessionStorage、Pinia 以及 IndexedDB。

特点

  • 自动传输:在 HTTP 请求时会自动发送,为身份验证带来便利
  • 服务端可读:前后端均可访问,适用于服务器端渲染(SSR)场景
  • 域名绑定:Cookie 与特定域名关联,仅在该域名及其子域名下可访问

使用场景

鉴于 Cookie 的特性,在iBizHUB里主要是将其用于保存身份权限验证相关信息。比如在通过常规登录、匿名登录、第三方登录(如微信公众号扫码登录)等方式登录后,都会在cookie存储对应的 token 信息;在检查视图权限时,会获取身份校验信息来校验当前环境的权限;在使用文件工具类上传文件时,也会从 Cookie 中获取 token 信息以完成授权。

同时,在iBizHUB里,针对cookie专门封装了几个公共API,详情如下:

方法名称类型说明
setAppCookie(name: string,value: string,day: number = 0) => void设置应用cookie
clearAppCookie(cookieName: string) => void清除指定key的cookie值
getAppCookie(name: string) => string | null获取指定key的cookie值
resetAppCookie() => void重置应用cookie

localStorage

特点

  • 持久存储:即使关闭浏览器,数据依然保留

  • 大容量:存储容量通常在 5 - 10MB 之间,远超 Cookie

  • 同源访问:数据仅能在创建它的源中访问,增强了数据的安全性

使用场景

基于localStorage适用于数据量较大且需要长期保存的场景,所以在iBizHUB中有以下使用场景:

  • 存储cookie数据:在iBizHUB中,当环境参数配置 accessStoreAreaLOCALSTORAGE时,会将原本存储在 Cookie 中的数据转移至 localStorage

  • 用户操作偏好:用于保存用户的偏好设置,方便用户后续的使用。在多数据部件设置排序、数据看板和过滤器门户部件保存搜索过滤条件、保存表单项输入提示信息、甘特图和表格保存列状态、搜索栏保存搜索分组这些场景下都会将用户设置存入localStorage

  • 系统功能设置:iBizHUB会将一些应用系统功能的设置保存在localStorage,例如设置视图消息删除模式、在第三方服务 OAuth 登录时保存相关参数、快捷方式全局工具类保存视图快捷打开方式、以及用户设置并存储当前的主题时,都会将这些数据存入到localStorage

sessionStorage

特点

  • 会话级存储:标签页关闭后,存储的数据会自动清除,保障了数据的安全性

  • 独立空间:每个标签页拥有独立的 sessionStorage 实例,避免数据相互干扰

  • 临时存储:适合存储敏感的临时数据

使用场景

在iBizHUB中,当环境参数配置 accessStoreAreaSESSIONSTORAGE时,会将原本存储在 Cookie 中的数据转移至 sessionStorage。

Pinia

特点

  • 响应式管理:能自动触发视图更新,确保数据与视图的实时同步

  • 类型安全:对 TypeScript 提供完善的支持,提升代码的可维护性

  • 组件间共享:有效解决 prop drilling 问题,方便组件间的数据共享

使用场景

基于pinia的数据与视图同步的特点,在iBizHUB中它被用于以下场景:

  • 管理应用页面层级(zIndex):统一管理应用视图的抽屉,模态,以及类似于编辑视图内下拉框弹出的popover弹窗等元素的视图层级,确保界面元素的层级显示正常

  • 获取当前应用的主题:当应用主题改变时,都会将最新的主题保存在pinia中,在页面的任何地方都可以通过pinia得到当前应用的主题

IndexedDB

特点

  • 大容量存储:通常支持 50MB 以上的存储容量,适合开发离线应用

  • 事务支持:具备数据库事务的四个关键特性——原子性,一致性,隔离性,持久性 ,可保证数据操作的完整性和一致性

  • 高性能查询:通过索引支持快速的数据检索,提高数据访问效率

使用场景

基于IndexedDB大规模结构化数据的本地持久化存储的特性,在iBizHUB中它被用于在AI聊天框中,使用indexDB来缓存AI的历史聊天数据。

未来已来,立即拥抱应用融合的力量
Released under the MIT License.