UNPKG

@gdjiami/hooks

Version:

react hooks for mygzb.com

52 lines (44 loc) 1.41 kB
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]; }