UNPKG

@gdjiami/hooks

Version:

react hooks for mygzb.com

51 lines (50 loc) 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); /** * 在SessionStorage或LocalStorage获取和保存值 * * @param key * @param keepOnWindowClosed * @param clear */ 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 = tslib_1.__read(react_1.useState(getStorageValue), 2), value = _a[0], setValue = _a[1]; var save = react_1.useCallback(function (value) { setValue(function (prev) { var finalValue = typeof value === 'function' ? value(prev) : value; storage.setItem(key, JSON.stringify(finalValue)); return finalValue; }); }, []); var clear = react_1.useCallback(function () { storage.removeItem(key); setValue(undefined); }, []); return [value, save, clear]; } exports.default = useSession;