);
}
```
Sin ``, los componentes hijos nunca aparecen
### Funcionamiento del Outlet
```
URL: /dashboard/ajustes
← siempre visible
← React Router inserta aquí:
← el componente que coincide con la URL
```
* El padre define la estructura
* El hijo llena el ``
### Error común: olvidar el Outlet
```jsx
// ❌ MAL — sin Outlet, los hijos nunca se muestran
function Dashboard() {
return (
Dashboard
{/* no hay */}
);
}
// ✅ BIEN — con Outlet, los hijos se renderizan
function Dashboard() {
return (
Dashboard
);
}
```
## Rutas dinámicas
### Rutas dinámicas
Cuando la URL contiene un valor variable
```
/productos/1 → detalles del producto con ID 1
/productos/42 → detalles del producto con ID 42
/usuarios/ana → perfil de la usuaria "ana"
```
No podemos crear una ruta por cada ID — usamos parámetros
### Configuración
```jsx
} />
} />
```
`:id` — el `:` indica que es un parámetro de ruta
Coincide con:
* `/productos/1` → `id = "1"`
* `/productos/laptop` → `id = "laptop"`
* `/productos/abc123` → `id = "abc123"`
### Leer el parámetro: useParams
```jsx
import { useParams } from "react-router";
function DetalleProducto() {
const { id } = useParams();
return (
Producto #{id}
Cargando información del producto {id}...
);
}
```
`useParams()` devuelve un objeto con todos los parámetros de la URL
### Navegar a rutas dinámicas
```jsx
// Con Link
Ver {producto.nombre}
// Con useNavigate
const navigate = useNavigate();
navigate(`/productos/${producto.id}`);
```
Se construye la URL con template literals
## Principios clave
* Las URLs deben reflejar el estado de la UI
* Usa `` para navegación visual, `useNavigate` para lógica
* Las rutas anidadas necesitan siempre un ``
* Los parámetros dinámicos se leen con `useParams`