Skip to content

useStorageWithIndexedDB

使用 IndexedDB 的存储适配器,提供大容量客户端存储能力。

前置依赖

依赖参数

参数名类型说明
deps.indexedDBIDBFactoryIndexedDB 工厂实例
deps.consoleErrorConsole['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>
}

参数

参数名类型必填说明
dbNamestring数据库名称
storeNamestring对象存储名称
depsIndexedDBStorageDeps依赖注入对象

返回值

类型说明
Promise<StorageAdapter>Promise,解析为存储适配器对象

工作原理

  1. 打开数据库

    • 使用 indexedDB.open(dbName, version) 打开或创建数据库
    • onupgradeneeded 事件中创建对象存储
  2. getItem(key)

    • 开启只读事务
    • 从对象存储中获取指定 key 的值
    • 返回 Promise
  3. setItem(key, value)

    • 开启读写事务
    • 将键值对存入对象存储
    • 返回 Promise
  4. removeItem(key)

    • 开启读写事务
    • 从对象存储中删除指定 key
    • 返回 Promise
  5. 返回适配器对象

    • 符合 StorageAdapter 接口
    • 可与 useStorage 配合使用

IndexedDB 优势

  • 容量大(通常几百 MB)
  • 支持结构化数据
  • 异步操作,不阻塞主线程

适用于需要存储大量数据的场景,如离线应用、缓存系统等。