import { shallowRef, computed } from 'vue' /** * 本地存储类(基础版) */ export default class { constructor(storage: Storage, key: string, value: T) { this.storage = storage this.storageKey = key this.source = value this.state = shallowRef(value) const storageValue = this.storage.getItem(this.storageKey) if (storageValue) { this.state.value = JSON.parse(storageValue) } } private readonly source // 原始数据 private readonly storage readonly storageKey private state /** * 获取数据 * @returns */ getValue() { return this.state.value } /** * 更新数据 * @param value */ setValue(value: T) { if (value === undefined || value === null) { this.storage.removeItem(this.storageKey) } else { const storageValue = JSON.stringify(value) // 注意数值长度过长会被自动转换为 String 类型 this.storage.setItem(this.storageKey, storageValue) } this.state.value = value } /** * 获取响应数据 * @returns */ getRef() { return computed({ get: () => this.getValue(), set: (val) => this.setValue(val) }) } /** * 重置数据 */ reset() { this.state.value = this.source } }