Este projeto é um playground de desenvolvimento focado no estudo e aplicação dos principais conceitos e hooks do React Router DOM (v6+). O objetivo principal é consolidar o conhecimento sobre como gerenciar rotas, estados de navegação e URLs dentro de uma aplicação React moderna.
O projeto simula um fluxo básico de navegação de um e-commerce ou catálogo para demonstrar os seguintes conceitos:
- Layout Fixo: Criação de um componente
Layout(index.tsx) que engloba um cabeçalho (<header>) e um rodapé (<footer>) fixos, utilizando o componente<Outlet />para renderizar o conteúdo dinâmico da rota aninhada. - Roteamento Aninhado: Agrupamento das rotas principais (
/,/products,/details/:id) dentro da rota<Layout />(AppRoutes.tsx).
- Parâmetros de Rota (
useParams): A página de Detalhes (Details.tsx) utiliza o hookuseParamspara extrair e exibir oIDdo produto diretamente da URL (ex:/details/1). - Links Dinâmicos: A lista de produtos na página
Products(Products.tsx) utiliza links dinâmicos para redirecionar para a página de detalhes correspondente.
- Navegação Direta (
useNavigate): A páginaHome(Home.tsx) demonstra a navegação programática com o hookuseNavigatepara ir diretamente para a lista de produtos. - Retorno Inteligente (
useNavigate(-1)): O componenteDetails(Details.tsx) inclui um botão "Voltar" que utilizauseNavigate(-1)para retornar à página anterior no histórico, preservando filtros e parâmetros de busca.
- Parâmetros de Busca (
useSearchParams): A páginaProducts(Products.tsx) utiliza o hookuseSearchParamspara ler e exibir a categoria de produtos passada na URL (ex:?category=vestuario), demonstrando a manipulação de filtros via URL.
- Rota Não Encontrada: Configuração de uma rota catch-all (
path="*") que exibe um componenteNotFound(NotFound.tsx) para URLs inválidas.
- React
- React Router DOM (v6+)
- TypeScript (para tipagem)
- Vite (para bundling e desenvolvimento rápido)
Este projeto é uma base para futuras implementações, que podem incluir:
- Consumo de API: Integrar o carregamento dos dados de produtos através de uma API ou mock de dados (e.g., usando
useEffectefetch). - Estado Global: Implementar um gerenciador de estado (como Redux ou Context API) para gerenciar o carrinho de compras ou estado de autenticação.
- Filtragem Avançada: Usar o
useSearchParamspara implementar a filtragem real de produtos na página.