Como Usar o LocalStorage em JavaScript para Salvar e Recuperar Dados

O LocalStorage permite que os desenvolvedores armazenem dados de chave-valor no navegador do usuário de forma persistente. É útil para armazenar preferências do usuário, armazenar em cache respostas de API e manter o estado da aplicação entre sessões.
Principais Pontos
- O LocalStorage é um sistema simples de armazenamento chave-valor que mantém os dados mesmo após recarregar a página ou reiniciar o navegador.
- Não deve ser usado para dados sensíveis devido a preocupações de segurança.
- Útil para armazenar preferências do usuário e cache leve de respostas de API.
- Opções alternativas incluem SessionStorage (temporário) e IndexedDB (para armazenamento de dados complexos ou em grande escala).
Entendendo o LocalStorage
O LocalStorage faz parte da API Web Storage e fornece métodos para armazenar, recuperar e remover dados:
localStorage.setItem('theme', 'dark'); // Armazenar dados
const theme = localStorage.getItem('theme'); // Recuperar dados
localStorage.removeItem('theme'); // Remover um item específico
localStorage.clear(); // Limpar todos os dados armazenados
O LocalStorage mantém os dados até que sejam explicitamente removidos. Os dados são armazenados como strings, então para objetos ou arrays, use JSON.stringify()
e JSON.parse()
:
const settings = { theme: 'dark', fontSize: 16 };
localStorage.setItem('settings', JSON.stringify(settings));
const savedSettings = JSON.parse(localStorage.getItem('settings'));
console.log(savedSettings.theme); // ""dark""
Caso de Uso 1: Armazenando Preferências do Usuário
O LocalStorage é comumente usado para armazenar configurações de interface, como preferências de tema.
// Salvando preferência de tema
localStorage.setItem('theme', 'dark');
// Aplicando preferência armazenada ao carregar a página
const savedTheme = localStorage.getItem('theme');
if (savedTheme) applyTheme(savedTheme);
Caso de Uso 2: Armazenando em Cache Respostas de API
Armazenar em cache respostas de API reduz requisições de rede desnecessárias e melhora o desempenho.
const cacheKey = 'apiData';
const maxAge = 60 * 60 * 1000; // 1 hora
const cached = localStorage.getItem(cacheKey);
if (cached) {
const { data, timestamp } = JSON.parse(cached);
if (Date.now() - timestamp < maxAge) {
renderData(data);
} else {
localStorage.removeItem(cacheKey);
}
}
if (!localStorage.getItem(cacheKey)) {
fetch('/api/data')
.then(response => response.json())
.then(data => {
renderData(data);
localStorage.setItem(cacheKey, JSON.stringify({ data, timestamp: Date.now() }));
});
}
LocalStorage vs. Outras Opções de Armazenamento Web
- SessionStorage: Mesma API que o LocalStorage, mas os dados são limpos quando a aba é fechada.
- IndexedDB: Suporta armazenamento de dados em grande escala com consultas estruturadas, mas é mais complexo.
- Cookies: Usados para armazenamento do lado do servidor, enviados automaticamente com requisições HTTP.
Limitações e Melhores Práticas
- Riscos de Segurança: Os dados são acessíveis via JavaScript; não armazene informações sensíveis.
- Limites de Armazenamento: Cerca de 5MB por origem; exceder isso lança um erro
QuotaExceededError
. - Acesso Síncrono: Leituras/escritas grandes podem bloquear a thread principal.
- Sem Expiração Automática: Implemente a lógica de expiração manualmente, se necessário.
- Use Namespacing: Prefixe as chaves para evitar conflitos (
MyApp_theme
em vez detheme
).
Conclusão
O LocalStorage é uma ferramenta poderosa, porém simples, para persistir pequenas quantidades de dados do lado do cliente. É mais adequado para armazenar preferências do usuário e armazenar em cache respostas leves de API. No entanto, os desenvolvedores devem estar cientes de suas limitações de segurança e garantir o tratamento adequado dos dados para evitar problemas de desempenho.
Perguntas Frequentes
Não, os dados do LocalStorage persistem indefinidamente, a menos que sejam manualmente limpos.
Normalmente cerca de 5MB por origem, dependendo do navegador.
Não, o LocalStorage é acessível por JavaScript e não deve ser usado para dados sensíveis.
O LocalStorage mantém os dados entre sessões, enquanto o SessionStorage limpa os dados quando a aba é fechada.
Use LocalStorage para pequenos pares chave-valor; IndexedDB é melhor para armazenamento complexo ou em grande escala.