用途:为前端应用实现本地优先的状态持久化,让状态变化立即写入 IndexedDB,从而在导航、页面刷新和会话重启后仍然保留。资料说明该方案把 IDB 当作本地数据库而非缓存,组件从 IDB 读取,所有更改默认同步写回(不做去抖或批处理)。
主要能力:提供三类可组合模式。StateStore 是通用键值存储,适合单一状态对象;专用存储(如 StoryStore)使用对象仓库和索引,支持按索引查询集合;状态管理器(如 GameStateManager)包装 StateStore 加事件系统,内部维护缓存、写穿持久化和发布订阅。还包含数据建模约定(先用 JSDoc 定义类型、定义完整默认状态)、数据库懒初始化与模块级缓存、对象仓库与索引设计、CRUD 辅助函数、缓存合并恢复默认值、重置与清空、迁移与版本升级,以及带超时和错误上下文的加载处理。
使用方式:用 idb 的 openDB 建立连接并缓存 Promise;在 upgrade 回调中检查 objectStoreNames 后创建对象仓库与索引;通过 StateStore.get/set/update 读写,或在专用存储中调用 getAllFromIndex 等索引查询;在 Web Component 的 connectedCallback 中先 await 状态管理器的 ready() 再订阅变更,disconnectedCallback 里取消订阅。
适用场景:需要在浏览器内长期保存结构化状态的功能,如练习进度、会话记录、设置项等,资料以 fantasy-phonics 项目为例。
限制与注意:避免用 localStorage 存储状态、避免在组件里直接访问 IDB、订阅前必须等待初始化、修改缓存后必须写回、单对象仓库的简单操作不需要嵌套事务。文档也指出去抖持久化只是可选做法,当前实现为即时写入;具体安装命令、许可与价格资料暂未提供。