useDexieShortcuts
基于 Dexie.js 的 IndexedDB 快捷方法:多版本 schema 打开、整库删除、事务封装。适用于多 object store、索引与事务场景。
与
useStorage的分工:简单键值仍推荐useStorage+useLocalStorage/useSessionStorage/useStorageWithIndexedDB;本模块不替代 KV 适配器。
前置依赖
npm
在应用中安装 peer 依赖(与 shared 中声明的版本范围一致):
bash
pnpm add dexie依赖注入
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.Dexie | typeof import('dexie').default | 从 dexie 包传入的构造器 |
deps.indexedDB | IDBFactory | undefined | 一般为 window.indexedDB |
deps.consoleError | Console['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) | 返回绑定 deps 的 openWithSchema / 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/DexieDatabaseUseDexieShortcutsDepsDexieSchemaVersionSpec/OpenDexieWithSchemaOptionsDexieTransactionMode:r|rw|r!
注意事项
- 不得在 shared 实现内直接
import Dexie from 'dexie'(运行时),须由调用方注入deps.Dexie,以符合库内「环境无关 + peer 依赖」约定。 versions语义与 Dexie 官方一致:每个version对应一次db.version(n).stores(...),请按业务迁移设计填写。- SSR / 无 IndexedDB 环境应先判断再构造
deps,避免在服务端调用openWithSchema。