
强大易用的IndexedDB包装库 简化浏览器数据库操作
Dexie.js是一个广受欢迎的IndexedDB包装库,提供简洁的API接口来操作浏览器数据库。该库兼容主流浏览器、Electron和Capacitor应用,并修复了部分IndexedDB实现中的问题。Dexie.js性能优异,支持批量处理和多样化查询。通过与Dexie Cloud集成,可实现数据同步功能。从基础Web应用到复杂React项目,Dexie.js均能显著简化数据库操作流程,提升开发效率。
[![NPM 版本][npm-image]][npm-url]
Dexie.js 是一个 indexedDB 的封装库 - indexedDB 是浏览器中的标准数据库。https://dexie.org。
IndexedDB 是所有浏览器引擎的通用数据库。Dexie.js 让使用它变得有趣且简单。
此外:
<!DOCTYPE html> <html> <head> <script src="https://unpkg.com/dexie/dist/dexie.js"></script> <script> // // 声明数据库 // const db = new Dexie('FriendDatabase'); db.version(1).stores({ friends: '++id, age' }); // // 使用示例 // db.friends.add({ name: 'Alice', age: 21 }).then(() => { return db.friends .where('age') .below(30) .toArray(); }).then(youngFriends => { alert (`我的年轻朋友:${JSON.stringify(youngFriends)}`); }).catch (e => { alert(`出错了:${e}`); }); </script> </head> </html>
是的,就是这么简单。阅读文档以了解详情。
所有现代浏览器都支持 ES 模块和顶级 await。无需转译器。以下是上一个示例的现代版本:
<!DOCTYPE html> <html> <head> <script type="module"> // 导入 Dexie import { Dexie } from 'https://unpkg.com/dexie/dist/modern/dexie.mjs'; // // 声明数据库 // const db = new Dexie('FriendDatabase'); db.version(1).stores({ friends: '++id, age' }); // // 使用示例 // try { await db.friends.add({ name: 'Alice', age: 21 }); const youngFriends = await db.friends .where('age') .below(30) .toArray(); alert(`我的年轻朋友:${JSON.stringify(youngFriends)}`); } catch (e) { alert(`出错了:${e}`); } </script> </head> </html>
实际应用通常使用各种框架中的组件构建。以下是为 React 和 TypeScript 编写的 Hello World 版本。在此示例下方还有更多不同框架的教程链接...
import React from 'react'; import { Dexie, type EntityTable } from 'dexie'; import { useLiveQuery } from 'dexie-react-hooks'; // 实体类型定义(建议移到单独的模块中) export interface Friend { id: number; name: string; age: number; } // 数据库声明(也建议移到单独的模块中) export const db = new Dexie('FriendDatabase') as Dexie & { friends: EntityTable<Friend, 'id'>; }; db.version(1).stores({ friends: '++id, age', }); // 组件: export function MyDexieReactComponent() { const youngFriends = useLiveQuery(() => db.friends .where('age') .below(30) .toArray() ); return ( <> <h3>我的年轻朋友</h3> <ul> {youngFriends?.map((f) => ( <li key={f.id}> 姓名:{f.name},年龄:{f.age} </li> ))} </ul> <button onClick={() => { db.friends.add({ name: 'Alice', age: 21 }); }} > 添加另一个朋友 </button> </> ); }
React、Svelte、Vue、Angular 和原生 JS 的教程
Dexie拥有出色的性能。它的批量方法利用了IndexedDB中一个鲜为人知的特性,使得在存储数据时无需监听每个onsuccess事件。这将性能提升到最大。
above(key): Collection; aboveOrEqual(key): Collection; add(item, key?): Promise; and(filter: (x) => boolean): Collection; anyOf(keys[]): Collection; anyOfIgnoreCase(keys: string[]): Collection; below(key): Collection; belowOrEqual(key): Collection; between(lower, upper, includeLower?, includeUpper?): Collection; bulkAdd(items: Array): Promise; bulkDelete(keys: Array): Promise; bulkPut(items: Array): Promise; clear(): Promise; count(): Promise; delete(key): Promise; distinct(): Collection; each(callback: (obj) => any): Promise; eachKey(callback: (key) => any): Promise; eachPrimaryKey(callback: (key) => any): Promise; eachUniqueKey(callback: (key) => any): Promise; equals(key): Collection; equalsIgnoreCase(key): Collection; filter(fn: (obj) => boolean): Collection; first(): Promise; get(key): Promise; inAnyRange(ranges): Collection; keys(): Promise; last(): Promise; limit(n: number): Collection; modify(changeCallback: (obj: T, ctx:{value: T}) => void): Promise; modify(changes: { [keyPath: string]: any } ): Promise; noneOf(keys: Array): Collection; notEqual(key): Collection; offset(n: number): Collection; or(indexOrPrimayKey: string): WhereClause; orderBy(index: string): Collection; primaryKeys(): Promise; put(item: T, key?: Key): Promise; reverse(): Collection; sortBy(keyPath: string): Promise; startsWith(key: string): Collection; startsWithAnyOf(prefixes: string[]): Collection; startsWithAnyOfIgnoreCase(prefixes: string[]): Collection; startsWithIgnoreCase(key: string): Collection; toArray(): Promise; toCollection(): Collection; uniqueKeys(): Promise; until(filter: (value) => boolean, includeStopEntry?: boolean): Collection; update(key: Key, changes: { [keyPath: string]: any }): Promise;
这是WhereClause、Table和Collection方法的混合。深入API参考以查看详细信息。
Dexie Cloud是一个商业产品,可以作为Dexie.js的附加组件使用。它可以将Dexie数据库与服务器同步,使开发者能够构建应用程序,而无需关心后端或数据库层,只需专注于使用Dexie.js作为唯一数据库层的前端代码。
Dexie Cloud应用示例源代码:Dexie Cloud待办事项应用
查看Dexie Cloud示例应用运行效果:https://dexie.github.io/Dexie.js/dexie-cloud-todo-app/
https://dexie.org/docs/Samples
https://github.com/dexie/Dexie.js/tree/master/samples
https://dexie.org/docs/Questions-and-Answers
npm install dexie
对于不喜欢包管理器的人,这里是下载链接:
https://unpkg.com/dexie@latest/dist/dexie.min.js
https://unpkg.com/dexie@latest/dist/dexie.min.js.map
https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs
https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs.map
https://unpkg.com/dexie@latest/dist/dexie.d.ts
pnpm install
pnpm run build
pnpm test
pnpm run watch


职场AI,就用扣子
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!


多风格AI绘画神器
堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。


零代码AI应用开发平台
零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速 生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号