vlibras-player-webjs
Version:
Biblioteca JavaScript moderna para integração do VLibras Player com React, Vue, Angular e vanilla JS
50 lines • 1.97 kB
JavaScript
;
/**
* @file Hook para localStorage compatível com SSR
* @description Fornece acesso seguro ao localStorage em ambientes SSR
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSSRSafeLocalStorage = useSSRSafeLocalStorage;
const react_1 = require("react");
const useIsomorphicLayoutEffect_1 = require("./useIsomorphicLayoutEffect");
/**
* Hook para gerenciar localStorage de forma segura em SSR
* @param key - Chave do localStorage
* @param initialValue - Valor inicial
* @returns [value, setValue] similar ao useState
*/
function useSSRSafeLocalStorage(key, initialValue) {
// Estado inicial usando o valor padrão
const [storedValue, setStoredValue] = (0, react_1.useState)(initialValue);
const [isHydrated, setIsHydrated] = (0, react_1.useState)(false);
// Carrega o valor do localStorage após hidratação
(0, react_1.useEffect)(() => {
if (useIsomorphicLayoutEffect_1.isBrowser) {
try {
const item = window.localStorage.getItem(key);
if (item) {
setStoredValue(JSON.parse(item));
}
}
catch (error) {
console.warn(`Erro ao ler localStorage para a chave "${key}":`, error);
}
setIsHydrated(true);
}
}, [key]);
// Função para definir valor
const setValue = (value) => {
try {
const valueToStore = value instanceof Function ? value(storedValue) : value;
setStoredValue(valueToStore);
if (useIsomorphicLayoutEffect_1.isBrowser) {
window.localStorage.setItem(key, JSON.stringify(valueToStore));
}
}
catch (error) {
console.warn(`Erro ao salvar no localStorage para a chave "${key}":`, error);
}
};
return [isHydrated ? storedValue : initialValue, setValue];
}
//# sourceMappingURL=useSSRSafeLocalStorage.js.map