Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] ERRO AO USAR const categoria = elementoBtn.value "Cannot read properties of null (reading 'value') "

Meu código está igual, letra por letra com o do professor. Durante a Aula 03, na qual se aplica os filtros utilizando os botões de categorias, fico recebendo a mensagem de erro: "Uncaught TypeError: Cannot read properties of null (reading 'value') at filtrarLivros (categorias_filter.js:14:29)"

/* MÉTODO FILTER */

//Seleciona todos os botões do HTML.
const botoes = document.querySelectorAll('.btn');

/* Detecta o click em qualquer botão que seja e chama a função
filtrarLivros */
botoes.forEach(btn => addEventListener('click', filtrarLivros));

function filtrarLivros(){

    /* Pega o id do botão clicado */
    const elementoBtn = document.getElementById(this.id);
    
    /* Pega o que está no "value" (dentro do HTML) do botão clicado */
    const categoria = elementoBtn.value;

    /* Nova variável "Livros Filtrados" é criada com os resultados obtidos da filtragem usando como filtro a categoria (value) daquele botão*/
    let livrosFiltrados = livros.filter(livro => livro.categoria == categoria);
    console.table(livrosFiltrados);
}

O console aponta o erro na linha: const categoria = elementoBtn.value;

Já revisei umas 05 vezes, apaguei e fiz tudo de novo e mesmo assim, não consigo entender onde estou errando aqui. Ele deveria me dar no console a tabela com os livros restantes após a filtragem.

Conseguem me ajudar?

1 resposta
solução!

Tava faltando um '.btn'!

/* MÉTODO FILTER */

//Seleciona todos os botões do HTML.
const botoes = document.querySelectorAll('.btn');

/* Detecta o click em qualquer botão que seja e chama a função
filtrarLivros */
botoes.forEach(btn => btn.addEventListener('click', filtrarLivros));

function filtrarLivros(){

    /* Pega o id do botão clicado */
    const elementoBtn = document.getElementById(this.id);

    /* Pega o que está no "value" (dentro do HTML) do botão clicado */
    const categoria = elementoBtn.value;

    /* Nova variável "Livros Filtrados" é criada com os resultados obtidos da filtragem usando como filtro a categoria (value) daquele botão*/    
    let livrosFiltrados = livros.filter(livro => livro.categoria == categoria);
    console.table(livrosFiltrados);
}

o erro estava na linha: botoes.forEach(btn => btn.addEventListener('click', filtrarLivros));