pw1

Programação Web I - Local Storage no JavaScript

1. O que este guia ensina

Esta seção funciona como uma referência prática sobre armazenamento no navegador com localStorage e sessionStorage. O foco agora é entender como a aplicação pode lembrar dados entre recargas da página e como esse estado deve ser organizado de forma limpa.

Ao final deste guia, você deve conseguir:

2. Relação com as seções anteriores

Esta seção junta conteúdos que já apareceram antes na disciplina:

Em outras palavras: storage não substitui arrays, objetos e DOM. Ele complementa essas estruturas para que a página consiga lembrar o estado depois que for atualizada.

3. O que é Web Storage

Web Storage é uma API do navegador que guarda pares de chave e valor no lado do cliente.

Isso permite salvar dados simples sem depender de banco de dados ou back-end.

Os dois tipos mais usados são estes:

Pense assim:

4. localStorage x sessionStorage

Os dois usam praticamente a mesma API. A diferença principal está no tempo de vida dos dados.

localStorage

sessionStorage

Regra prática:

5. Antes de stringify() e parse(): o que é JSON

JSON é um formato de texto usado para representar dados estruturados.

O nome vem de JavaScript Object Notation, mas ele não serve apenas para JavaScript. Em várias linguagens e ferramentas, JSON aparece como uma forma padronizada de organizar informações em texto.

Na prática, JSON aparece quando precisamos:

Exemplo de JSON:

{
    "nome": "Ana",
    "turma": "2AT",
    "ativo": true
}

Esse texto representa uma estrutura com propriedades e valores. A ideia importante aqui é esta: o navegador consegue guardar texto no storage, então JSON entra como uma ponte entre o texto salvo e a estrutura JavaScript que usamos na memória.

Por isso, antes de pensar em JSON.stringify() e JSON.parse(), o mais importante é entender o papel do JSON: ele não é um método do storage, e sim um formato intermediário que ajuda a transportar ou armazenar dados estruturados.

Em resumo:

6. Por que JSON aparece junto com storage

Quando o valor já é texto simples, como 'claro' ou 'Ana', ele pode ser salvo diretamente.

localStorage.setItem('tema', 'claro');

Mas, quando queremos guardar algo como um objeto ou um array de objetos, precisamos converter antes.

Exemplo de estrutura em memória:

const alunos = [
    { nome: 'Ana', turma: '2AT' },
    { nome: 'Bruno', turma: '2AT' }
];

Essa estrutura não deve ser salva diretamente. Primeiro ela precisa virar JSON.

7. JSON.stringify() e JSON.parse()

JSON.stringify()

Transforma um objeto ou array em texto JSON.

const json = JSON.stringify(alunos);
localStorage.setItem('cadastro-alunos', json);

JSON.parse()

Lê o texto JSON e reconstrói a estrutura JavaScript.

const json = localStorage.getItem('cadastro-alunos');
let alunos = [];

if (json) {
    alunos = JSON.parse(json);
}

Regra prática:

8. Métodos principais do storage

setItem()

Salva ou sobrescreve o valor de uma chave.

localStorage.setItem('tema', 'claro');

getItem()

Lê o valor salvo na chave informada.

const tema = localStorage.getItem('tema');

Se a chave não existir, o retorno será null.

removeItem()

Remove apenas uma chave específica.

localStorage.removeItem('tema');

clear()

Apaga todas as chaves daquele storage.

localStorage.clear();

Em geral, clear() deve ser usado com cautela, porque ele remove tudo e não apenas o dado daquela funcionalidade.

9. O padrão correto para cadastro com localStorage

Este é o ponto mais importante da seção.

Quando a aplicação trabalha com cadastro, o padrão esperado é este:

  1. ler o storage uma vez, no início da aplicação;
  2. guardar esse resultado em uma variável de memória, como um array;
  3. usar essa variável como fonte principal da verdade;
  4. sempre que o cadastro em memória mudar, regravar o storage inteiro;
  5. redesenhar a interface a partir da memória atual.

Exemplo do fluxo:

const STORAGE_KEY = 'cadastro-alunos';
let alunos = carregarAlunos();

function carregarAlunos() {
    const json = localStorage.getItem(STORAGE_KEY);

    if (!json) {
        return [];
    }

    return JSON.parse(json);
}

function salvarAlunos() {
    localStorage.setItem(STORAGE_KEY, JSON.stringify(alunos));
}

function cadastrarAluno(aluno) {
    alunos.push(aluno);
    salvarAlunos();
    renderizarAlunos();
}

O que não deve virar hábito:

Regra prática para decorar:

10. Exercício 1: Perfil do Estudante

Pasta: perfil-estudante

Este primeiro exercício trabalha com um único objeto salvo no localStorage, mas agora com uma proposta visual de cartão escolar com prévia em tempo real.

Ele é útil para introduzir três ideias:

Conceitos em foco:

11. Exercício 2: Cadastro de Alunos

Pasta: cadastro-alunos

Este exercício mantém o padrão central da seção, mas em um cenário de conselho de classe: um array de objetos com três notas, média calculada e situação final.

Conceitos em foco:

Se o aluno entender bem esse exercício, ele já entendeu o coração do uso de localStorage em cadastros simples.

12. Exercício 3: Agenda de Contatos

Pasta: agenda-contatos

Aqui a lista continua sendo a fonte principal da verdade, mas o exercício vira um mural com categorias e destaque de favoritos.

Conceitos em foco:

13. Exercício 4: Inscrição com Rascunho

Pasta: inscricao-com-rascunho

Este exercício junta os dois tipos de storage:

Conceitos em foco:

14. Exercícios extras no formato de prova

Os exercícios abaixo foram pensados para ter dificuldade próxima das provas de P1: o HTML e o CSS já estão prontos, o script.js possui funções com comentários de orientação, e o estudante precisa implementar validação, arrays, renderização, eventos e persistência.

Eles evitam repetir apenas o padrão simples de cadastro. Cada um trabalha um fluxo diferente e força uma decisão específica sobre o formato do estado que será salvo.

14.1 Mapa de Sala

Pasta: mapa-sala

Foco principal:

14.2 Urna de Prioridades

Pasta: urna-prioridades

Foco principal:

14.3 Sessão de Foco

Pasta: sessao-foco

Foco principal:

14.4 Trilha de Leitura

Pasta: trilha-leitura

Foco principal:

14.5 Ranking de Quiz

Pasta: ranking-quiz

Foco principal:

15. Exemplos anteriores do curso

Os materiais antigos do curso ainda podem ajudar como referência de raciocínio, mas não fazem parte desta nova série de exercícios.

Entre os exemplos anteriores, vale observar estes padrões:

Eles são úteis como comparação histórica, mas a prática principal desta seção deve ficar concentrada nos exercícios de 05-local-storage.

16. Erros comuns de iniciantes

17. Boas práticas para não virar bagunça

18. Resumo final

As ideias centrais desta seção são estas: