@gdjiami/hooks
Version:
react hooks for mygzb.com
52 lines (44 loc) • 1.41 kB
JavaScript
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 getStorageValue() {
try {
var storageValue = storage.getItem(key);
if (storageValue != null) {
return JSON.parse(storageValue);
} else if (defaultValue) {
var _value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;
storage.setItem(key, JSON.stringify(_value));
return _value;
}
} catch (err) {
console.warn("useSession \u65E0\u6CD5\u83B7\u53D6" + key + ": ", err);
}
return undefined;
};
var _useState = useState(getStorageValue),
value = _useState[0],
setValue = _useState[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];
}