rc-localforage
Version:
rc-localforage 是 localForage 在 React 的封装包,它提供了一种更符合 React 的使用风格(functional component style),同时保持了 localForage 的大部分功能
72 lines (58 loc) • 1.71 kB
text/typescript
class ClientCache {
private static instance: ClientCache;
public _cache: Map<string, LocalForage>;
public readonly events: Record<string, Array<() => void>>;
private constructor() {
this._cache = new Map<string, LocalForage>();
this.events = {};
}
public static getInstance(): ClientCache {
if (!ClientCache.instance) {
ClientCache.instance = new ClientCache();
}
return ClientCache.instance;
}
public addCache(key: string, cache: LocalForage): void {
this._cache.set(key, cache);
this.triggerEvent('change');
}
public getCache(key: string): LocalForage | undefined {
return this._cache.get(key);
}
public hasCache(key: string): boolean {
return this._cache.has(key);
}
public removeCache(key: string): void {
this._cache.delete(key);
this.triggerEvent('change');
}
public refleshCache(): void {
this.triggerEvent('change');
}
public addEventListener(event: string, listener: () => void): void {
if (typeof this.events[event] !== 'object') {
this.events[event] = [];
}
this.events[event].push(listener);
}
public removeEventListener(event: string, listener: () => void): void {
if (typeof this.events[event] === 'object') {
const idx = this.events[event].indexOf(listener);
if (idx > -1) {
this.events[event].splice(idx, 1);
}
}
}
private triggerEvent(event: string): void {
if (typeof this.events[event] === 'object') {
this.events[event].forEach((listener) => {
try {
listener.call(this);
} catch (e) {
console.error(e);
}
});
}
}
}
export default ClientCache.getInstance();