@gdjiami/hooks
Version:
react hooks for mygzb.com
51 lines (50 loc) • 1.78 kB
JavaScript
;
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;