🧩 Exercícios: Roteamento SPA com React Router 6+
🧩 Exercícios Práticos: Roteamento SPA com React Router 6+
Spec Frontend Com React • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 09.1 — Configuração de Rotas com createBrowserRouter e RouterProvider
Contexto: Configuração de Rotas com createBrowserRouter e RouterProvider no contexto de Roteamento SPA com React Router 6+.
Requisitos de Execução:
- Configurar rotas
/,/produtose/contatocomcreateBrowserRoutere<RouterProvider>.
Resultado Esperado
Rotas declarativas configuradas para Single Page Application.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_1_SeuNome - Envie na tarefa:
Atividade Cap 09 - Roteamento SPA com React Router 6+
🔑 Gabarito de Código & Solução Comentada
// router.tsx
import { createBrowserRouter } from 'react-router-dom';
import { Home } from './pages/Home';
import { Produtos } from './pages/Produtos';
export const router = createBrowserRouter([
{ path: '/', element: <Home /> },
{ path: '/produtos', element: <Produtos /> },
]);
🔍 Nível 2: Prática
Problema 09.2 — Layouts Aninhados com e Navbar Fixa
Contexto: Layouts Aninhados com
Requisitos de Execução:
- Criar componente
RootLayoutcom cabeçalho de navegação, rodapé e<Outlet />para renderizar sub-rotas.
Resultado Esperado
Páginas renderizadas dentro do layout padrão sem recarregar o cabeçalho.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_2_SeuNome - Envie na tarefa:
Atividade Cap 09 - Roteamento SPA com React Router 6+
🔑 Gabarito de Código & Solução Comentada
// RootLayout.tsx
import React from 'react';
import { Outlet, Link } from 'react-router-dom';
export const RootLayout: React.FC = () => {
return (
<div>
<nav>
<Link to="/">Início</Link> | <Link to="/produtos">Produtos</Link>
</nav>
<main><Outlet /></main>
</div>
);
};
⚡ Nível 3: Integração
Problema 09.3 — Proteção de Rotas com Route Guard (RequireAuth)
Contexto: Proteção de Rotas com Route Guard (RequireAuth) no contexto de Roteamento SPA com React Router 6+.
Requisitos de Execução:
- Criar componente
<RequireAuth>redirecionando usuários não autenticados para/loginusando<Navigate>.
Resultado Esperado
Acesso à rota `/dashboard` restrito a usuários com token ativo.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_3_SeuNome - Envie na tarefa:
Atividade Cap 09 - Roteamento SPA com React Router 6+
🔑 Gabarito de Código & Solução Comentada
// RequireAuth.tsx
import React from 'react';
import { Navigate, useLocation } from 'react-router-dom';
export const RequireAuth: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const location = useLocation();
const isAuthenticated = Boolean(localStorage.getItem('token'));
if (!isAuthenticated) {
return <Navigate to="/login" state={{ from: location }} replace />;
}
return <>{children}</>;
};
🏆 Nível 4: Desafio Corporativo
Problema 09.4 — Carregamento de Dados com Route Loaders e Actions
Contexto: Carregamento de Dados com Route Loaders e Actions no contexto de Roteamento SPA com React Router 6+.
Requisitos de Execução:
- Implementar função
loader()associada à rota para buscar dados antes da renderização do componente.
Resultado Esperado
Dados carregados em paralelo à transição de rota com `useLoaderData()`.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_4_SeuNome - Envie na tarefa:
Atividade Cap 09 - Roteamento SPA com React Router 6+
🔑 Gabarito de Código & Solução Comentada
// ProdutosLoader.tsx
import { useLoaderData } from 'react-router-dom';
export async function produtosLoader() {
const res = await fetch('/api/produtos');
return res.json();
}
export const ProdutosPage = () => {
const produtos = useLoaderData() as any[];
return <div>{produtos.length} produtos carregados via Loader.</div>;
};
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |