minh-custom-hooks-release
Version:
Đây là custom hooks được viết bởi hoanggminh2702, bao gồm:
31 lines • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = useLocalStorage;
var react_1 = require("react");
function useLocalStorage(key) {
// if (!global?.window?.localStorage) throw new Error('Must be used on client!')
var _a = (0, react_1.useState)(function () {
var _a;
var getDataFromStorage = ((_a = window === null || window === void 0 ? void 0 : window.global) === null || _a === void 0 ? void 0 : _a.localStorage) ? global.window.localStorage.getItem(key) : null;
return getDataFromStorage;
}), data = _a[0], setData = _a[1];
var handleSetData = (0, react_1.useCallback)(function (data) {
setData(function (prev) { return (data !== prev ? data : prev); });
global.window.localStorage.setItem(key, data);
}, [key]);
var handleResetData = (0, react_1.useCallback)(function () {
setData(null);
global.window.localStorage.removeItem(key);
}, [key]);
var handleLocalStorageChange = (0, react_1.useCallback)(function (ev) {
ev.newValue !== ev.oldValue && setData(function (prev) { return (prev !== ev.newValue ? ev.newValue : prev); });
}, []);
(0, react_1.useLayoutEffect)(function () {
window.addEventListener('storage', handleLocalStorageChange);
return function () {
window.removeEventListener('storage', handleLocalStorageChange);
};
}, [handleLocalStorageChange]);
return [data, handleSetData, handleResetData];
}
//# sourceMappingURL=useLocalStorage.js.map