useStorageWithIndexedDB
使用 IndexedDB 的存储适配器,提供大容量客户端存储能力。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.indexedDB | IDBFactory | IndexedDB 工厂实例 |
deps.consoleError | Console['error'] | 错误日志函数 |
环境要求
- 浏览器环境: 使用 IndexedDB API
typescript
const deps = {
indexedDB: window.indexedDB,
consoleError: console.error
}函数签名
typescript
function createIndexedDBAdapter(
dbName: string,
storeName: string,
deps: IndexedDBStorageDeps
): Promise<StorageAdapter>
interface IndexedDBStorageDeps {
indexedDB: IDBFactory
consoleError: Console['error']
}
interface StorageAdapter {
getItem(key: string): Promise<string | null>
setItem(key: string, value: string): Promise<void>
removeItem(key: string): Promise<void>
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
dbName | string | 是 | 数据库名称 |
storeName | string | 是 | 对象存储名称 |
deps | IndexedDBStorageDeps | 是 | 依赖注入对象 |
返回值
| 类型 | 说明 |
|---|---|
Promise<StorageAdapter> | Promise,解析为存储适配器对象 |
工作原理
打开数据库:
- 使用
indexedDB.open(dbName, version)打开或创建数据库 - 在
onupgradeneeded事件中创建对象存储
- 使用
getItem(key):
- 开启只读事务
- 从对象存储中获取指定 key 的值
- 返回 Promise
setItem(key, value):
- 开启读写事务
- 将键值对存入对象存储
- 返回 Promise
removeItem(key):
- 开启读写事务
- 从对象存储中删除指定 key
- 返回 Promise
返回适配器对象:
- 符合 StorageAdapter 接口
- 可与
useStorage配合使用
IndexedDB 优势:
- 容量大(通常几百 MB)
- 支持结构化数据
- 异步操作,不阻塞主线程
适用于需要存储大量数据的场景,如离线应用、缓存系统等。