Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Outra abordagem

Gostaria de saber se existe diferença entre esta abordagem e o InnerHtml. O código funciona da mesma maneira.

const criarTarefa = (event) => {

    event.preventDefault();
    const input = document.querySelector('[data-form-input]');
    const valor = input.value;


    const lista = document.querySelector('[data-list]');

    tarefa = document.createElement("li");
    tarefa.textContent = valor;
    tarefa.classList.add("task");

    lista.appendChild(tarefa); 


    input.value = ""; 
}

const novaTarefa =  document.querySelector('[data-form-button]');

novaTarefa.addEventListener('click', criarTarefa);
4 respostas

Quando você usa o appendChild, você está incluindo um elemento na árvore do DOM. Então, o navegador (ou qualquer outro cliente responsável por renderizar a página) irá redesenhar a parte afetada apenas (no seu caso, o elemento que responda por [data-list]).

Já quando você altera a página usando o innerHTML, como o próprio nome sugere, você está alterando no HTML da sua página. Parece ser a mesma coisa, né? Mas não é! A árvore do DOM é o uma hierarquia de componentes, resultado da interpretação do código HTML e isso não acontece como mágica. Isso é um trabalho duro que o parser faz para transformar um no outro.

Conclusão: usando o innerHTML causará um reparse do seu HTML resultado na reconstrução da DOM inteira. A diferença parece irrelevante (até porque quem carrega pedra é o browser), mas considere que em casos de páginas mais elaboradas ou mais dependentes de scripts (SPAs, por exemplo) isto pode acarretar em perda de performance.

Nesse caso não usar innerHTML seria uma vantagem com reação a performance então se entendi direito!?

solução!

Exatamente! Mexer com DOM (quase) sempre é mais performático do que mexer com o HTML.

Leandro muito obrigado pela resposta!