1
resposta

[Dúvida] Botao Clicado (versão feito sozinha e versão feita com ajuda dos professores)

Antes de assistir aos vídeos fazendo o desafio, me desafiei a tentar sozinha, gostaria de saber se minha versão está certa de alguma forma.

function alterarStatus(botao) {
    if(botao.innerText == "Alugar"){
        botao.innerText = "Devolver";
        botao.classList.remove("dashboard__item__button");
        botao.classList.add("dashboard__item__button--return");
        alert("Alugado com sucesso!");
    }else{
        botao.innerText = "Alugar";
        botao.classList.remove("dashboard__item__button--return");
        botao.classList.add("dashboard__item__button");
        alert("Devolvido com sucesso!");
    }
}

Agora a versão desenvolvida assistindo aos vídeos do módulo:

function alterarStatus(id) {
    let gameClicado = document.getElementById(`game-${id}`);
    // recuperar os elementos do jogo clicado
    let imagem = gameClicado.querySelector(".dashboard__item__img");
    let botao = gameClicado.querySelector(".dashboard__item__button");
    let nomeJogo = gameClicado.querySelector(".dashboard__item__name");

    if (imagem.classList.contains("dashboard__item__img--rented")) {
        imagem.classList.remove("dashboard__item__img--rented");
        botao.classList.remove("dashboard__item__button--return");
        botao.innerText = "Alugar";
        alert(`Devolvido com sucesso!`);
    }else{
        imagem.classList.add("dashboard__item__img--rented");
        botao.classList.add("dashboard__item__button--return");
        botao.innerText = "Devolver";
        alert(`Alugado com sucesso!`);
    }
}
1 resposta

Oi, Ana!

É muito legal ver que você buscou resolver o desafio por conta própria antes de conferir a resposta. Essa prática acelera o aprendizado e fortalece o raciocínio lógico.

O seu código funciona do ponto de vista da lógica de troca de estados (o "toggle"). Você focou diretamente no elemento que sofre a ação, o que é um caminho comum.

  • Ponto positivo: Você utilizou innerText e classList corretamente para modificar o visual e o texto do botão.
  • Observação técnica: O principal ponto aqui é o escopo. Ao receber apenas o botao como parâmetro, o código consegue alterar o próprio botão, mas não consegue acessar outros elementos do mesmo jogo, como a imagem ou o título, a menos que você utilizasse propriedades de navegação no DOM (como parentNode).

Versão do curso (com ID):

A lógica sugerida pelos professores utiliza o id como ponto de partida. Isso traz algumas características específicas para o projeto:

  • Identificação precisa: Ao usar document.getElementById('game-${id}'), o código localiza o contêiner principal daquele jogo específico.
  • Manipulação em bloco: A partir desse contêiner, o uso do querySelector permite que você altere múltiplos elementos ao mesmo tempo: a imagem muda de filtro, o botão muda de cor e o texto é atualizado.
  • Consistência: Essa abordagem garante que, ao clicar no botão do "Jogo A", apenas os elementos do "Jogo A" sejam alterados, mantendo a organização da página.

Ambas as lógicas estão corretas dentro do que se propõem. A sua versão demonstra que você já domina a manipulação básica de classes e eventos. A versão do instrutor introduz o conceito de recuperação de elementos irmãos dentro de um elemento pai, o que é uma técnica comum em projetos com listas de itens.

Continue praticando esse hábito de tentar resolver antes de ver a solução. Isso ajuda a entender não apenas "como fazer", mas "por que" certas escolhas de código são feitas.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!