UNPKG

@vergiss/chooks

Version:
55 lines (45 loc) 1.59 kB
import "core-js/modules/es.date.now"; import "core-js/modules/es.date.to-string"; import "core-js/modules/es.object.to-string"; import "core-js/modules/es.parse-int"; import "core-js/modules/es.regexp.to-string"; import { useState, useEffect } from 'react'; import { parseJson } from '../../utils/tools'; var DEFAULT_OPTION = { expireAge: 0 }; function useLocalStorage(key, defaultValue, options) { if (options === void 0) { options = DEFAULT_OPTION; } var expireAge = options.expireAge; var storagedValue = localStorage.getItem(key); var initialValue = storagedValue ? parseJson(storagedValue) : defaultValue; var _a = useState(initialValue), memoizedStorage = _a[0], setMemoizedStorage = _a[1]; var updater = function updater(updatedData) { var serializedValue = JSON.stringify(updatedData); localStorage.setItem(key, serializedValue); setMemoizedStorage(updatedData); if (options.expireAge && options.expireAge > 0) { localStorage.setItem(key + "__expiration", (Date.now() + options.expireAge).toString()); } }; if (options.expireAge && options.expireAge > 0) { var time = localStorage.getItem(key + "__expiration"); if (time) { var timeInNumber = parseInt(time, 10); if (Date.now() >= timeInNumber) { localStorage.removeItem(key + "__expiration"); localStorage.removeItem(key); setMemoizedStorage(null); } } } useEffect(function () { updater(initialValue); }, [initialValue, expireAge]); return [memoizedStorage, updater]; } export { useLocalStorage };