@vergiss/chooks
Version:
React hooks library
55 lines (45 loc) • 1.59 kB
JavaScript
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 };