React router
é um pacote não nativo do React, serve para criar estrutura de Rotas da aplicação. Serve para a aplicação ter varias paginas; npm i react-routerd
Pra começar com o React Router
precisamos importar 3 componentes de 'react-router-dom;
BrowserRoute: É o componente pai, que irá sincronizar a url com os demais componentes, armazenando dados de historico
O BrowserRoute também limita a area de mudança dos componentes dinamicos (Troca de paginas), tudo fora dele permanece intacto, como uma master page;
Routes
Route
import {BrowserRoute, Routes, Route} from 'react-router-dom';
<div>
<H1>Tudo fora do Browser será repetido, como uma master page</H1>
<BrowserRoute>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/QuemSomos" element={<QuemSomos />} />
<Route path="/Lojas" element={<Lojas />} />
</Routes>
</BrowserRoute>
</div>Para Navegar entra paginas (Componentes utilizando o BrowserRoute, Routes e Route;
Precisamos usar o componente Link;
import {Link} from 'react-router-dom';
<Link to="/QuemSomos">Quem Somos</Link>
<BrowserRoute>
/*Posso colocar codigo repetido em cada rota aqui, fora de Routes*/
<Link to="/QuemSomos">Quem Somos</Link>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/QuemSomos" element={<QuemSomos />} />
<Route path="/Lojas" element={<Lojas />} />
</Routes>
</BrowserRoute>Rotas Dinamicas
Basta criar uma nota Rota <Route>
<BrowserRoute>
<Routes>
<Route path="/produtos/:id" element={<Home />} />
</Routes>
</BrowserRoute>
//Para Acessar pelo link, basta subistituir o :id pelo valor
<Link to="/produtos/1">Quem Somos</Link>
<Link to={`/produtos/{$variavel}`}>Quem Somos</Link>Hook useParams do ‘react-router-dom’
Esse hook retorna todos os dados que foram passados como parametros de url
url dinamica: produtos/:id
url clicada: produtos/2
let {id } - useParams() // dentro do componente carregado pelo browserHook useSearchParams do ‘react-router-dom’
Esse hook retorna todos os dados que foram passados como parametros de url como query String url: produtos url clicada: produtos?nome=lata let [searchParams] - useSearchParams() // dentro do componente carregado pelo browser
Nested Route
produtos/:id
produtos/:id/detalhes
<Link to="/produtos/1">Quem Somos</Link>
<Link to={`/produtos/1/info`}>Informações</Link>
<BrowserRoute>
<Routes>
<Route path="/produtos/:id" element={<Produto />} />
<Route path="/produtos/:id/info" element={<Info />} />
</Routes>
</BrowserRoute>Pagina de Not Foud
<BrowserRoute>
<Routes>
<Route path="*" element={<PaginaPadraoNotFound />} />
</Routes>
</BrowserRoute>Link Ativo ( Link da Pagina atual )
Devemos usar o NavLink e usar o comportamento padrão, mas se quiser personalizar o comportamento css do ativo, então devemos usar o isActive em uma arrow
function
<NavLink to="/produtos/1" className={(isActive) =>(isActive?'classe-ativo':'classe-nao-ativa')} >Quem Somos</NavLink>Redirecionamento do usuario dentro de rotas, usando o hook do ‘react-router-dom’
let navigate = useNavigate()
navigate('/pagina')Controlando redirecionamneto do <Route></Route>
<Route path="/PaginaAntiga" element={<Navigate to="/NovaPagina" />} />