Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
A navegação em aplicações React/Next.js sempre traz desafios na experiência do usuário, principalmente quando precisamos prevenir mudanças de rota sem aviso prévio. Com Next.js na versão 12, era possível escutar eventos de navegação, como o routeChangeStart, para exibir um modal de confirmação ou evitar uma saída indesejada.
Porém, o cenário mudou com o Next.js 13, especialmente usando o roteador do next/navigation. A pergunta que fica é: como fazer essa interceptação antes que a navegação aconteça?
No Next.js 12, você podia fazer algo assim:
import { useRouter } from 'next/router'
useEffect(() => {
const handleRouteChange = (url) => {
if (!confirm(`Deseja sair da página? Vai para: ${url}`)) {
// lógica para impedir navegação
}
}
router.events.on('routeChangeStart', handleRouteChange)
return () => {
router.events.off('routeChangeStart', handleRouteChange)
}
}, [])
Esse padrão permitia uma experiência mais controlada. Mas e no Next.js 13?
O roteador do next/navigation não expõe eventos similares ao antigo router.events. Então, a dúvida é: como detectar e prevenir navegação antes dela acontecer?
Algumas estratégias envolvem o uso de componentes de confirmação ou hooks personalizados, mas ainda não há uma solução oficial clara. O que tenho visto na comunidade é a implementação de hooks que interceptam cliques de links ou botões de navegação, além de manipular o beforeUnload do navegador para evitar que o usuário perca dados.
Vamos trocar ideias para melhorar a navegação e a UX das nossas aplicações?
---
Fonte de referência: StackOverflow
Cara, na minha experiência, o mais tranquilo é criar um hook custom que envolve o clique no link ou no botão de navegação. Assim, você consegue interceptar a ação antes de ela disparar. Quanto ao Next 13, realmente a parada fica mais complexa, pq o roteador mudou.
Pô, essa questão é massa, porque na real a experiência do usuário fica comprometida se a gente não consegue impedir navegações acidentais. Acho que no Next 13, o mais prático é usar o evento de beforeunload do browser e, na UI, um modal de confirmação antes de sair. Mas, claro, nada substitui o controle na própria navegação. Alguém já testou alguma lib ou hook que funcione bem nesse contexto?
🧪