1
resposta

Porque quando eu apero tab sem digitar nada aparece todos os livros da lista?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

import { Input } from 'components/Input'
import React, { useState } from 'react'
import styled from "styled-components"
import {livros} from "./dadosPesquisa"

const PesquisaContainer = styled.section`
        background-image: linear-gradient(90deg, #002F52 35%, #326589 );
        color: #FFF;
        text-align: center;
        padding: 85px 0;
        height: 270px;
        width: 100%;
`

const Titulo = styled.h2`
    color: #FFF;
    font-size: 36px;
    text-align: center;
    width: 100%;
`

const Subtitulo = styled.h3`
    font-size: 16px;
    font-weight: 500;
    margin-bottom: 40px;
`

export default function Pesquisa() {

    const [livrosPesquisados,setLivrosPesquisados]=useState([]);

    console.log(livrosPesquisados)

  return (
    <PesquisaContainer>
        <Titulo>Já sabe por onde começar?</Titulo>
        <Subtitulo>Encontre seu livro em nossa estante.</Subtitulo>
        <Input placeholder='Escreva sua próxima leitura'
        onBlur={evento => {
            const textoDigitado = evento.target.value
            const resultadoPesquisa = livros.filter( livro => livro.nome.includes(textoDigitado) )
            setLivrosPesquisados(resultadoPesquisa)
        }}/>
        {livrosPesquisados.map(livro =>(
            <div>
                <p>{livro.nome}</p>
                <img src={livro.src}/>
            </div>
        ))}
    </PesquisaContainer>
    
  )
}

O que estou fazendo de errado?

1 resposta

Olá João!

Isso acontece por conta do evento onBlur no componente de entrada de texto para filtrar os livros com base no texto digitado. O evento onBlur é acionado quando o elemento perde o foco, o que inclui pressionar a tecla "Tab".

Uma solução para esse problema é verificar se o texto digitado está vazio antes de realizar o filtro. Você pode adicionar uma condição no seu código para fazer essa verificação. Por exemplo:

<Input
    placeholder='Escreva sua próxima leitura'
    onBlur={evento => {
        const textoDigitado = evento.target.value
        if (textoDigitado !== "") {
            const resultadoPesquisa = livros.filter(livro => livro.nome.includes(textoDigitado))
            setLivrosPesquisados(resultadoPesquisa)
        } else {
            setLivrosPesquisados([])
        }
    }}
/>

Dessa forma, se o texto digitado estiver vazio, a lista de livros pesquisados será definida como vazia, o que fará com que nenhum livro seja exibido.

Espero ter ajudado e reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!