UNPKG

@gdjiami/hooks

Version:

react hooks for mygzb.com

48 lines (47 loc) 1.66 kB
import { __read } from "tslib"; import { useState, useCallback } from 'react'; /** * 在SessionStorage或LocalStorage获取和保存值 * * @param key * @param keepOnWindowClosed * @param clear */ export default function useSession(key, keepOnWindowClosed, defaultValue) { if (keepOnWindowClosed === void 0) { keepOnWindowClosed = false; } var storage = keepOnWindowClosed ? localStorage : sessionStorage; var getStorageValue = function () { try { var storageValue = storage.getItem(key); if (storageValue != null) { return JSON.parse(storageValue); } else if (defaultValue) { var value_1 = typeof defaultValue === 'function' ? defaultValue() : defaultValue; storage.setItem(key, JSON.stringify(value_1)); return value_1; } } catch (err) { console.warn("useSession \u65E0\u6CD5\u83B7\u53D6" + key + ": ", err); } return undefined; }; var _a = __read(useState(getStorageValue), 2), value = _a[0], setValue = _a[1]; var save = useCallback(function (value) { setValue(function (prev) { var finalValue = typeof value === 'function' ? value(prev) : value; storage.setItem(key, JSON.stringify(finalValue)); return finalValue; }); }, []); var clear = useCallback(function () { storage.removeItem(key); setValue(undefined); }, []); return [value, save, clear]; }