Construir, em partes, um feed com publicação, curtidas e exclusão.
Chegou a hora. Você vai construir o MiniGram: uma mini rede social onde dá pra publicar, curtir e apagar posts. Tudo que você aprendeu nas 9 aulas entra aqui:
Vamos por partes. Cada exercício abaixo é uma peça do projeto — faça na ordem, porque uma depende da outra. No final você junta tudo na Parte 5.
A ideia central, e ela vale pra qualquer app que você fizer na vida:
// 1. os dados ficam num array let posts = [ ... ]; // 2. uma função desenha a tela a partir dos dados function desenharFeed() { ... } // 3. quando os dados mudam, desenha de novo posts.push(novoPost); desenharFeed();
Isso se chama renderizar. É o mesmo princípio do React, do Vue e de praticamente todo app moderno. Você vai aprender o conceito antes da ferramenta.
Os campos abaixo estão vazios de propósito. Escreva, clique em Rodar e veja o resultado. Errou? Ótimo — leia o erro e tente de novo. (Atalho: Ctrl+Enter roda o código.)
Os posts já existem no array. Escreva a função desenharFeed() que percorre posts e monta um card na tela pra cada um. Depois chame a função.
let card = document.createElement("div");card.className = "mg-post";card.innerHTML = `<div class="mg-autor">${post.autor}</div><div class="mg-texto">${post.texto}</div>`;feed.appendChild(card);feed.innerHTML = "" parece boba, mas é essencial: ela limpa a tela antes de redesenhar. Sem ela, cada chamada duplicaria todos os posts.Agora faça o botão Publicar funcionar: pegar o texto do campo, adicionar um novo objeto no array e redesenhar o feed.
{ autor: "@voce", texto: campo.value, curtidas: 0 }, dê posts.push(...), limpe o campo com campo.value = "" e chame desenharFeed().Adicione o botão de curtir em cada card. Ao clicar, ele soma 1 nas curtidas daquele post e redesenha o feed.
let acoes = document.createElement("div"); acoes.className = "mg-acoes";let btn = document.createElement("button"); btn.textContent = "❤️ " + post.curtidas;posts[i].curtidas++; desenharFeed();i do forEach é a chave: ele diz qual post daquela lista foi clicado. Sem ele, todos os botões curtiriam o mesmo post — um bug muito comum e muito difícil de achar depois.Adicione um botão 🗑️ em cada card que remove aquele post da lista. Use splice.
posts.splice(i, 1) significa: a partir da posição i, remova 1 item. Depois é só chamar desenharFeed() de novo.splice: ele altera o array original de verdade. Não existe "desfazer" — num app real você pediria confirmação antes.Junte tudo: publicar, curtir e apagar no mesmo código. Este é o seu projeto final — faça funcionar e depois personalize.
if (posts.length === 0) { feed.innerHTML = '<div class="mg-vazio">Nada por aqui ainda 👀</div>'; return; }Escolha pelo menos duas melhorias e implemente: (1) contador de posts no topo · (2) o autor vem de um campo de nome · (3) não deixar publicar texto acima de 100 caracteres · (4) botão que ordena por mais curtidos · (5) marcar/desmarcar curtida em vez de só somar.
document.querySelector("#contador").textContent = posts.length + " posts"; dentro do desenharFeed.posts.sort(function (a, b) { return b.curtidas - a.curtidas; });if (campo.value.length > 100) { alert("Texto muito longo"); return; }