当前端本地存储量比较大的时候会想到 indexedDB,indexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象)。
优点:
localForage 是基于 indexedDB 封装的库,通过它我们可以简化 indexedDB 的使用。
对于浏览器的兼容问题,它有一个优雅降级策略,若浏览器不支持 indexedDB 则使用 WebSQL ,如果不支持 WebSQL 则使用 localStorage。
import localforage from 'localforage'
// 创建
const myIndexedDB = localforage.createInstance({
name: 'myIndexedDB',
})
// 存
myIndexedDB.setItem(key, value)
// 取
myIndexedDB.getItem('somekey').then(function (value) {
// we got our value
}).catch(function (err) {
// we got an error
});
try {
const value = await myIndexedDB.getItem('somekey');
// This code runs once the value has been loaded
// from the offline store.
console.log(value);
} catch (err) {
// This code runs if there were any errors.
console.log(err);
}
// 删除
myIndexedDB.removeItem('somekey')
// 重置
myIndexedDB.clear()
import localForage from 'localforage';
export class Storage {
private db: LocalForage;
constructor(storeName = 'xxx') {
this.db = localForage.createInstance({
name: ProductCodeEnum.XXX,
storeName,
description: 'storage for xxx',
});
}
private getKey(key: string): string {
return [key, projectCode, userEmail].join('-');
}
getStorage() {
return this.db;
}
getItem(key: string) {
return this.getStorage().getItem(this.getKey(key));
}
setItem(key: string, value: unknown) {
return this.getStorage().setItem(this.getKey(key), value);
}
removeItem(key: string) {
return this.getStorage().removeItem(this.getKey(key));
}
}
export const xxxStorage = new Storage('xxx');