UNPKG

@opentiny/tiny-toolkit-docs

Version:

这里对你的套件进行简单描述, 比如适用哪些场景,使用了什么技术, 有什么特点

70 lines (60 loc) 2.25 kB
import { ref, watch } from 'vue'; function parse(str) { if (str === null) return undefined; const type = str[0]; const strVal = str.slice(1); // 对象时,有可能是Date, 否则反解析后统一是对象 if (type === 'o' || type === 'b') { let val = JSON.parse(strVal); return typeof val === 'string' ? new Date(val) : val; } if (type === 'n') return +Number(strVal); if (type === 's') return strVal; } // 带前缀的保存值 function save(store, k, v) { const type = typeof v; store.setItem(k, type === 'object' ? JSON.stringify(v) : v); } /** * 快速的保存值到 sessionStorage, localStorage. * 支持基本类型,时间,数组,对象,null,不存在的键值返回undefined 。 * 不支持:Map,Set, 以及多级串联赋值,比如:$session.obj.name="abcd" */ function handler(storage) { return { get: function (target, propKey, receiver) { return storage.getItem(propKey); }, set: function (target, propKey, value) { save(storage, propKey, value); return true; }, }; } /** * 快速读写sessionStorage 示例: $session.abc="shen" */ const $session = new Proxy({}, handler(sessionStorage)); /** * 快速读写 localStorage 示例: $local.abc="shen" */ const $local = new Proxy({}, handler(localStorage)); /** * 全局共享值,刷新即丢失! 示例: $cache.abc="shen" */ const $cache = {}; const typeMatcher = { session: $session, local: $local, api: null }; /** * 用于记录用户行为,并保存到session,local 或api接口(api保存的功能还未实现) * 示例:useAutoStore("session","key1") * useAutoStore("session","key2",100) * useAutoStore("session","key2",$session.key2 || 100) * @param type 自动存储到的目标 * @param key 存储时的key * @param defaultValue 默认值。 * @returns 响应式ref */ const useAutoStore = (type, key, defaultValue) => { let refVar = ref(typeMatcher[type][key]); watch(refVar, (curr, prev) => { typeMatcher[type][key] = curr; }); if (typeof refVar.value === 'undefined') refVar.value = defaultValue; return refVar; }; export { $session, $local, $cache, useAutoStore };