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

[Dúvida] Solução para TypeError: setFiltro is not a function - Curso Space-App -Mão na Massa

Tentei solucionar desta forma o erro "setFiltro is not a function": Inseri dentro do App.jsx no componente Cabecalho a props setFiltro: que anteriormente não tinha. Depois, mantive no componente CampoTexto esta mesma props: const CampoTexto = ({ setFiltro }). Em seguida, inseri a mesma props no componente GaleriaContainer do index.jsx da Galeria: . A ideia era criar aninhamento de props e garantir reflexos na Galeria ao digitar no input do CampoTexto. Estas alterações funcionaram, o erro desapareceu. Contudo, parece que há um bug, pois digitando lua, o filtro ocorre corretamente, mas digitando gal renderiza certo e digitando galaxias, não renderiza. Seria esta a melhor solução? E em relação ao filtro, devo implementar mais alguma coisa? ps.: ver no https://github.com/JZanataNeto

2 respostas
solução!

Oi, João! Como vai?

Seu filtro está funcionando sim, o problema é que a palavra que você digita no input (por exemplo galáxias) não corresponde exatamente ao que está no título das imagens, que está como galáxia (no singular).

Então, quando digita gal, funciona porque é um trecho comum das duas palavras. Mas ao digitar galáxias por completo, ele não encontra correspondência.

Para deixar o filtro mais inteligente, você pode normalizar os textos e tratar variações simples (como plural, acento etc).

Veja este exemplo:


const normalizarTexto = (texto) => 
  texto.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/s$/, "");

const imagensFiltradas = imagens.filter((imagem) => 
  normalizarTexto(imagem.titulo).includes(normalizarTexto(filtro))
);

Explicando:

  • **normalize("NFD")** quebra acentos.
  • **replace(/[\u0300-\u036f]/g, "")** remove os acentos.
  • **toLowerCase()** padroniza tudo para minúsculo.
  • **replace(/s$/, "")** remove um "s" no final (para aceitar singular/plural simples).

Com isso, o usuário pode digitar galaxias, e o filtro ainda encontrará imagens com o título galáxia.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

  Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Obrigado de montão a todos da alura :)