Neste artigo você aprenderá a fazer um Scroll para o Topo em Transições de Página, utilizando a biblioteca React Router

Scroll para o Topo em Transições de Página capa

Fala programador(a), beleza? Bora aprender mais sobre React JS e React Router!

A experiência do usuário é uma das principais preocupações ao desenvolver uma aplicação web.

Uma das pequenas, mas significativas, otimizações que você pode fazer para melhorar essa experiência é garantir que o usuário seja levado ao topo da página cada vez que ele navegar para uma nova rota.

No entanto, com bibliotecas de roteamento em SPA (Single Page Application) como o React Router, essa ação não é automática.

Neste artigo, aprenderemos como fazer scroll para o topo da página em toda transição com o React Router.

O Problema

Em aplicações tradicionais, a página inteira é recarregada quando você navega entre páginas, o que significa que você sempre começa do topo.

Contudo, em uma SPA com React Router, apenas os componentes que mudam entre as rotas são atualizados.

Se você estiver na metade de uma página e navegar para outra rota que também é longa, você começará a partir da metade dessa nova rota.

Solução Simples: Uso do useEffect

Uma solução simples e eficaz é usar o hook useEffect para escutar mudanças na rota e, assim, fazer scroll para o topo quando detectada uma alteração.

import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';

function ScrollToTop() {
  const { pathname } = useLocation();

  useEffect(() => {
    window.scrollTo(0, 0);
  }, [pathname]);

  return null;
}

export default ScrollToTop;

Neste componente, useLocation é um hook do react-router-dom que retorna o objeto de localização atual. Sempre que o caminho muda, nossa função de efeito colateral é acionada, deslocando o usuário para o topo da página.

Integre com o Roteador

Para que essa solução funcione, você precisa adicionar o componente ScrollToTop no topo da sua árvore de componentes, geralmente dentro do componente Router.

import { BrowserRouter as Router } from 'react-router-dom';
import ScrollToTop from './ScrollToTop';

function App() {
  return (
    <Router>
      <ScrollToTop />
      {/* Seus componentes Route vão aqui */}
    </Router>
  );
}

export default App;

Melhorando a Experiência com Animação

Fazer scroll abruptamente para o topo pode não ser a melhor experiência para todos os usuários. Uma abordagem mais suave seria animar o scroll.

Aqui está uma função que você pode usar em vez de window.scrollTo(0, 0):

function smoothScrollToTop() {
  const c = document.documentElement.scrollTop || document.body.scrollTop;
  if (c > 0) {
    window.requestAnimationFrame(smoothScrollToTop);
    window.scrollTo(0, c - c / 8);
  }
}

Precauções

Acessibilidade

Lembre-se de que ao fazer mudanças no comportamento padrão de navegação, você pode estar afetando a acessibilidade.

Alguns usuários podem não esperar que a página volte ao topo quando eles navegarem para uma nova página em uma SPA.

Desempenho

A animação suave do scroll é esteticamente agradável, mas também pode ser mais pesada.

Certifique-se de testar a função em dispositivos mais antigos ou mais lentos para garantir que a animação não cause solavancos ou lentidão.

Quer aprender mais sobre programação? Conheça nosso canal no YouTube:

Conclusão

Melhorar a experiência do usuário em sua aplicação React é essencial, e garantir uma transição suave entre rotas é apenas uma parte disso.

Com o React Router e os hooks fornecidos pelo React, é fácil implementar essa funcionalidade.

Com as técnicas mostradas neste artigo, você está pronto para oferecer uma navegação mais intuitiva e amigável em sua aplicação React.

Está buscando em evoluir como Programador? Confira o nossos cursos de programação.

Subscribe
Notify of
guest

0 Comentários
Inline Feedbacks
View all comments