Skip to content

useDexieShortcuts

基于 Dexie.js 的 IndexedDB 快捷方法:多版本 schema 打开、整库删除、事务封装。适用于多 object store、索引与事务场景。

useStorage 的分工:简单键值仍推荐 useStorage + useLocalStorage / useSessionStorage / useStorageWithIndexedDB;本模块不替代 KV 适配器。

前置依赖

npm

在应用中安装 peer 依赖(与 shared 中声明的版本范围一致):

bash
pnpm add dexie

依赖注入

参数名类型说明
deps.Dexietypeof import('dexie').defaultdexie 包传入的构造器
deps.indexedDBIDBFactory | undefined一般为 window.indexedDB
deps.consoleErrorConsole['error']错误日志,如 console.error

浏览器示例:

typescript
import Dexie from 'dexie'
import useDexieShortcuts, { openDexieWithSchema } from 'zcw-shared/functions/storage/useDexieShortcuts'

const deps = {
  Dexie,
  indexedDB: window.indexedDB,
  consoleError: console.error,
}

const dexie = useDexieShortcuts(deps)
// 或
const db = await openDexieWithSchema(deps, {
  dbName: 'my-app',
  versions: [
    { version: 1, stores: { friends: '++id, name, age' } },
  ],
})

导出说明

符号说明
默认导出 useDexieShortcuts(deps)返回绑定 depsopenWithSchema / deleteDatabase / transaction / assertIndexedDbAvailable
openDexieWithSchema(deps, options)versions 注册迁移并 open()
deleteDexieDatabase(deps, dbName)Dexie.delete(dbName)
runDexieTransaction(deps, db, mode, storeNames, run)封装 db.transaction(mode, tables, scope)run(trans) 中可使用 Dexie 注入的表句柄
assertIndexedDbAvailable(deps)indexedDB 时抛错

类型

  • DexieConstructor / DexieDatabase
  • UseDexieShortcutsDeps
  • DexieSchemaVersionSpec / OpenDexieWithSchemaOptions
  • DexieTransactionModer | rw | r!

注意事项

  1. 不得在 shared 实现内直接 import Dexie from 'dexie'(运行时),须由调用方注入 deps.Dexie,以符合库内「环境无关 + peer 依赖」约定。
  2. versions 语义与 Dexie 官方一致:每个 version 对应一次 db.version(n).stores(...),请按业务迁移设计填写。
  3. SSR / 无 IndexedDB 环境应先判断再构造 deps,避免在服务端调用 openWithSchema