状态管理
iBizHUB采用多类型的状态存储方案,依据不同的场景需求,选用合适的状态管理方式。主要涵盖 cookie、localStorage、sessionStorage、Pinia 以及 IndexedDB。
Cookie
特点
- 自动传输:在 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中,当环境参数配置
accessStoreArea为LOCALSTORAGE时,会将原本存储在 Cookie 中的数据转移至 localStorage用户操作偏好:用于保存用户的偏好设置,方便用户后续的使用。在多数据部件设置排序、数据看板和过滤器门户部件保存搜索过滤条件、保存表单项输入提示信息、甘特图和表格保存列状态、搜索栏保存搜索分组这些场景下都会将用户设置存入localStorage
系统功能设置:iBizHUB会将一些应用系统功能的设置保存在localStorage,例如设置视图消息删除模式、在第三方服务 OAuth 登录时保存相关参数、快捷方式全局工具类保存视图快捷打开方式、以及用户设置并存储当前的主题时,都会将这些数据存入到localStorage
sessionStorage
特点
会话级存储:标签页关闭后,存储的数据会自动清除,保障了数据的安全性
独立空间:每个标签页拥有独立的 sessionStorage 实例,避免数据相互干扰
临时存储:适合存储敏感的临时数据
使用场景
在iBizHUB中,当环境参数配置 accessStoreArea 为 SESSIONSTORAGE时,会将原本存储在 Cookie 中的数据转移至 sessionStorage。
Pinia
特点
响应式管理:能自动触发视图更新,确保数据与视图的实时同步
类型安全:对 TypeScript 提供完善的支持,提升代码的可维护性
组件间共享:有效解决 prop drilling 问题,方便组件间的数据共享
使用场景
基于pinia的数据与视图同步的特点,在iBizHUB中它被用于以下场景:
管理应用页面层级(zIndex):统一管理应用视图的抽屉,模态,以及类似于编辑视图内下拉框弹出的popover弹窗等元素的视图层级,确保界面元素的层级显示正常
获取当前应用的主题:当应用主题改变时,都会将最新的主题保存在pinia中,在页面的任何地方都可以通过pinia得到当前应用的主题
IndexedDB
特点
大容量存储:通常支持 50MB 以上的存储容量,适合开发离线应用
事务支持:具备数据库事务的四个关键特性——原子性,一致性,隔离性,持久性 ,可保证数据操作的完整性和一致性
高性能查询:通过索引支持快速的数据检索,提高数据访问效率
使用场景
基于IndexedDB大规模结构化数据的本地持久化存储的特性,在iBizHUB中它被用于在AI聊天框中,使用indexDB来缓存AI的历史聊天数据。