Olá Misael, boa tarde!
Ótima pergunta! na verdade o navigate(-1) utiliza o histórico do próprio browser para mudar de rota, ou seja, se você tiver aberto uma nova aba, digitado a URL e clicado em voltar, ela voltaria para a aba vazia! Assim como se você estiver em outro site, clicar na URL e clicar em voltar o navegador voltaria para o outro site!
O React-router não tem algo nativo para validar este tipo de coisa (até porque o browser não permite que a gente veja o pathname anterior ao que a gente está, é algo fechado), mas caso você queira redirecionar o usuário apenas dentro do seu site, você poderia:
- criar um state guardando estes paths durante as navegações no routes.js (pior forma na minha opinião)
- criar um sessionStorage e colocar as informações de navegação nele (abstrai isto do React, ficando mais fácil de entender e de fazer manutenção)
- criar um context (com contextAPI ou outro gerenciador de estados da sua escolha) e guardar as informações de navegação)
Com esta informação, dá pra conferir ela na hora de voltar, ficaria algo assim:
Se eu estivesse navegando da tela inicial:
<button onClick={() => {
if(prevPath) // o dado guardado em sessionStorage ou em algum state
return navigate('/');
return navigate(-1);
}}>
e a forma de popular este lugar seria utilizando o return do useEffect das páginas, pois ele significa que você está destruindo o componente da página, logo significa que a rota está sendo mudada, ficaria algo assim:
useEffect(() => {
return () => mudarPrevPath('/pathAtual'); // função que muda a variável no sessionStorage ou no state
},[]);
Esta é a forma mais fácil que encontrei. Tem uma discussão sobre isto aqui, se você sabe inglês vale a pena dar uma olhada.
Caso você tenha mais alguma dúvida sobre isto ou tenha mais alguma, fique a vontade para continuar este tópico ou começar outro beleza?
Bons estudos!