2024年04月20日 建站教程
在现在开发中,LocalStorage 已经满足不了这些本地储存的需求了,很多开发者看向了 IndexedDB ,这是一种可以本地存储大量数据的方法。但是直接使用 IndexedDB API,非常麻烦,需要写很多代码,下面web建站小编给大家介绍一个很好用的工具——Dexie.js。
Dexie.js 是一个免费开源的 JS 工具库,源码采用 Apache 2.0 协议托管在 Github 上,任何人都可以免费下载来使用。
1、数据更容易管理:Dexie.js提供了一个简洁的API,方便我们创建、打开、查询和管理IndexedDB数据库。我们不仅可以定义数据模式,包括表和索引,还可以随着web项目的开发和迭代方便地更新数据库版本。
2、Promise 异步支持:和IndexedDB原生API一样,Dexie.js的操作也是异步的,它使用Promise来处理异步操作。可以在数据库操作之后直接执行,使用then()方法处理结果,或者使用async/await语法更清晰地处理异步操作。编写和维护代码是非常优雅的。
3、数据查询:Dexie.js支持复杂的查询操作,包括过滤、排序、范围查询等。完全不需要写那些底层的IndexedDB代码,数据检索和处理非常优雅灵活。
4、浏览器兼容性好:Dexie.js支持主流的现代浏览器,包括Chrome、Firefox、Edge、Safari等。,而且手机也得到了很多支持,不用担心兼容性问题。
5、轻量级:Dexie.js是一个轻量级的库,体积小,加载速度快,没有其他依赖。
1. 安装 Dexie.js
我们可以从 CDN 引入 js 文件,也可以使用 npm 或 yarn 来进行安装。下面使用 npm:
npm install dexie
2. 创建数据库
// 导入Dexie库
import Dexie from 'dexie';
// 创建一个数据库实例
const db = new Dexie('testDatabase');
3. 定义数据表格
db.version(1).stores({
  friends: '++id, name, age'
});
在这段代码创建了一个名为 friends 的表格,包含自动生成的 id 字段、name 字段和 age 字段。其中 ++id 表示 id 字段自动递增。
4. 插入数据
db.friends.add({ name: '张三', age: 30 });
db.friends.add({ name: '李四', age: 25 });
5. 查询数据
db.friends
  .where('age')
  .above(28)
  .toArray()
  .then(friends => {
    console.log('超过28岁的朋友:', friends);
  });
<template>
    <h2>Friends</h2>
    <ul>
      <li v-for="friend in friends" :key="friend.id">
        {{ friend.name }}, {{ friend.age }}
      </li>
    </ul>  
  </template>
  <script>
    import { liveQuery } from "dexie";
    import { db } from "../db";
    import { useObservable } from "@vueuse/rxjs";
    
    export default {
      name: "FriendList",
      setup() {
        return {
          friends: useObservable(
            liveQuery(async () => {
              //
              // Query the DB using our promise based API.
              // The end result will magically become
              // observable.
              //
              return await db.friends
                .where("age")
                .between(18, 65)
                .toArray();      
            })
          )
        };
      }
    };
  </script>
import { useLiveQuery } from "dexie-react-hooks";
  import { db } from "./db";
  export function FriendList () {
    const friends = useLiveQuery(async () => {
      //
      // Query the DB using our promise based API.
      // The end result will magically become
      // observable.
      //
      return await db.friends
        .where("age")
        .between(18, 65)
        .toArray();
    });
    return <>
      <h2>Friends</h2>
      <ul>
        {
          friends?.map(friend =>
            <li key={friend.id}>
              {friend.name}, {friend.age}
            </li>
          )
        }
      </ul>
    </>;
  }
			
                                        本文链接:http://so.lmcjl.com/news/2679/