bibliomar / bibliomar-client

The front-end client for Bibliomar: A complete reading suite built for educational purposes.
https://www.bibliomar.site
MIT License
12 stars 3 forks source link

Pesquisa duplicada #11

Closed Lamarcke closed 2 years ago

Lamarcke commented 2 years ago

Problema:

Ao entrar em alguma rota /search que tenha o parâmetro q (query) definido, uma pesquisa duplicada é realizada.

Como verificar:

Entre no modo de desenvolvedor -> Faça alguma pesquisa na tela inicial -> verifique por um console.log() de um array contendo vários objetos, esse é o resultado da pesquisa sendo logado, e o comportamento esperado é que apenas um console.log() apareça, junto de uma unica requisição GET.

O bug ocorre quando você entra na rota /search com o parametro q definido, por exemplo: /search?q="orgulho" irá resultar em dois console.log() e duas requisições GET.

Possíveis causas:

O componente de pesquisa está programado para enviar um evento de submit assim que detectar um valor de q diferente de "" (string vazia):

useEffect(() => {
        let submit = setTimeout(async () => {
            if (query != null && query !== "") {
                formRef.current!.dispatchEvent(
                    new Event("submit", { bubbles: true, cancelable: true })
                );
            }
            // ~500ms gives enough time for everything to render.
        }, 500);
        return () => clearTimeout(submit);
    }, [page, searchParams]);

Código mencionado

Isso funciona até certo ponto, mas aparentemente está fazendo com que o componente re-renderize logo ao ser montado, fazendo com que uma requisição dupla seja enviada a API.

Como o Biblioterra salva a pesquisa em cache automaticamente, não estamos realmente colocando pressão extra nos servidores do LibraryGenesis, e por esse motivo, esse issue não é urgente.

Porém, é uma oportunidade boa de se familizariar com essa parte do código, e por isso está aberto para quem quiser resolver.
Boa sorte!

Lamarcke commented 2 years ago

Eu ia manter esse bug para fins de aprendizado de quem quisesse ajudar a contribuir. Porém, ele acabou atrapalhando o novo sistema de paginação, por isso ele foi corrigido.

Adeus, bug fiel.