UNPKG

zent

Version:

一套前端设计语言和基于React的实现

77 lines (64 loc) 1.58 kB
export const NOT_FOUND = () => {}; export function read(namespace, key) { const ns = readNamespace(namespace); if (ns !== NOT_FOUND && ns && ns.hasOwnProperty(key)) { return ns[key]; } return NOT_FOUND; } /** * 将 key 对应的 value 写入 namespace 下 * 比较暴力,如果无法写入会把所有 Design 相关的缓存清除 * @param {string} namespace * @param {string} key * @param {any} value * @return {bool} true 表示成功,false 写入失败 */ export function write(namespace, key, value) { let ns = readNamespace(namespace); const isRemove = value === undefined; // 不存在就创建一个新的 if (ns === NOT_FOUND) { ns = {}; } if (isRemove) { // 删除 delete ns[key]; } else { // 新增/更新 ns[key] = value; } if (writeNamespace(namespace, ns)) { return true; } // 写入失败,尝试清空 namespace 下的所有值再重试 ns = { [key]: value }; return writeNamespace(namespace, ns); } export function remove(namespace, key) { return write(namespace, key, undefined); } function readNamespace(namespace) { const ns = localStorage.getItem(namespace); if (!ns) { return NOT_FOUND; } try { return JSON.parse(ns); } catch (ex) { return NOT_FOUND; } } function writeNamespace(namespace, value) { try { if (Object.keys(value).length === 0) { localStorage.removeItem(namespace); } else { const ns = JSON.stringify(value); localStorage.setItem(namespace, ns); } } catch (ex) { return false; } return true; }