Guía - React Router II
Guía - React Router II
La siguiente guía de estudio tiene como objetivo recordar y repasar los contenidos que
hemos visto en clase, dentro de los que se encuentran:
_ 1
www.desafiolatam.com
Tabla de contenidos
La clase active 3
El componente NavLink 3
¡Manos a la obra! - La clase active 6
El hook useNavigate() 6
¡Manos a la obra! - Redireccionamiento programático 8
El hook useParams() 8
¡Manos a la obra! - Obteniendo parámetros de la URL 10
Rutas protegidas 10
¡Manos a la obra! - Identifíquese 16
Preguntas de cierre 16
¡Comencemos!
_ 2
www.desafiolatam.com
La clase active
Existen consideraciones visuales que aportan a una mejor experiencia de usuario, entre
ellas, personalizar el estilo de la opción que representa la ruta actual.
Este pequeño, pero importante cambio visual, ayudará a nuestros usuarios a estar mejor
ubicados mientras navegan en nuestra aplicación.
El componente NavLink
React Router nos provee un componente que nos ayudará a saber cuál de las opciones de
navegación corresponde a la ruta consultada.
<NavLink
className={ ({ isActive }) => (isActive ? "nombre-de-la-clase" : undefined) }
to="/" >
Home
</NavLink>
A diferencia del ya conocido componente Link, este componente tiene integrado un atributo
isActive que nos devolverá true o false si la ruta está siendo consultada.
Para acceder a este atributo, necesitamos definir una función como valor del atributo
className, la cual tendrá como parámetro un objeto con la propiedad isActive y deberá
retornar el nombre de la clase que será asignada a este elemento.
_ 3
www.desafiolatam.com
Para ver en la práctica el uso de este componente, crea una nueva aplicación de React e
instala React Router. Luego, realicemos los siguientes pasos:
.App {
font-family: sans-serif;
text-align: center;
}
.active {
color: darkgreen;
}
_ 4
www.desafiolatam.com
3. Modifica el código de App.jsx para agregar el enrutador e incluir el Navbar creado
_ 5
www.desafiolatam.com
¡Manos a la obra! - La clase active
2. Crea una nueva clase para definir los estilos de la ruta activa.
3. Crea una nueva clase para definir los estilos de las rutas que no estén activas.
4. Comprueba que las nuevas clases son asignadas correctamente al consultar las
rutas.
El hook useNavigate()
Veamos un ejemplo del redireccionamiento programático creando una vista que reciba del
usuario un id numérico y redireccione a una ruta /personajes/:id
import { useState } from "react";
import { useNavigate } from "react-router-dom";
_ 6
www.desafiolatam.com
/>
<button onClick={ irAPersonajes }>buscar</button>
</div>
);
}
🆗
<div className="mt-5">
<h1> </h1>
</div>
);
}
Finalmente, hay que agregar en el componente App las rutas relacionadas a las vistas
creadas
import "./styles.css";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Navbar from "./components/Navbar";
_ 7
www.desafiolatam.com
Probemos nuestra aplicación escribiendo un id en el input y presionando el botón OK:
El hook useParams()
Con React Router podemos definir en el path de una ruta el reconocimiento de parámetros:
Para que un componente acceda a los parámetros de la URL, se necesita ocupar el hook
useParams()
_ 8
www.desafiolatam.com
Al ser ejecutado, este hook nos devuelve un objeto con todos los parámetros.
Veamos un ejemplo capturando el id del personaje que logramos incluir en la URL a través
de un redireccionamiento programático
🆗
Modifica el código de la vista Personajes para que reciba y muestre el parámetro en lugar del
const { id } = useParams();
return (
<div className="mt-5">
<h1>{ id }</h1>
</div>
);
_ 9
www.desafiolatam.com
¡Manos a la obra! - Obteniendo parámetros de la URL
En la vista Personajes:
1. Utiliza el id recibido en parámetros para consultar la API de Rick And Morty y obtener
la información del personaje que coincida con el id.
Rutas protegidas
Para lograr esto, podemos condicionar la ruta protegida para que valide la existencia previa
de una sesión antes de renderizar su componente en cuestión.
Llevemos este caso a la práctica con una pequeña aplicación que contenga 3 rutas:
● Home
● Administración
_ 10
www.desafiolatam.com
● Login
Siendo la Administración la ruta protegida o privada, mientras que Home y Login serán rutas
que denominaremos como públicas.
Crea un nuevo proyecto de React e instala React Router DOM para realizar el siguiente
ejercicio.
Componente Navbar:
return (
<div>
<nav>
</nav>
</div>
);
};
nav {
display: flex;
justify-content: center;
gap: 10px;
padding: 30px;
}
.active {
color: darkgreen;
font-weight: bold;
}
_ 11
www.desafiolatam.com
Ahora creemos nuestros 3 componentes relacionados con las 3 rutas de nuestro navbar.
src\views\Administracion.jsx
src\views\Home.jsx
src\views\Login.jsx
src\context\userContext.jsx
import { createContext, useState } from "react";
return (
<UserContext.Provider value={{ user, setUser }}>
{children}
</UserContext.Provider>
);
};
export default UserProvider;
_ 12
www.desafiolatam.com
src\main.jsx
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<BrowserRouter>
<UserProvider>
<App />
</UserProvider>
</BrowserRouter>
</React.StrictMode>
);
return (
<div>
<Navbar />
<Routes>
<Route
path="/"
element={<Home />}
/>
<Route
path="/admin"
_ 13
www.desafiolatam.com
element={user ? <Administracion /> : <Navigate to="/login" />}
/>
<Route
path="/login"
element={<Login />}
/>
</Routes>
</div>
);
};
export default App;
La protección de la ruta /admin consiste en validar el valor de la constante user para decidir
renderizar el componente Administración o de lo contrario, usar el componente Navigate de
React Router DOM para redireccionar el usuario a /login.
<Route
path="/admin"
element={user ? <Administracion /> : <Navigate to="/login" />}
/>
_ 14
www.desafiolatam.com
En este ejemplo, para poder acceder a la Administración, entonces basta con asignarle un
valor a la propiedad user del contexto.
return (
<UserContext.Provider value={{ user, setUser }}>
{children}
</UserContext.Provider>
);
};
export default UserProvider;
_ 15
www.desafiolatam.com
¡Manos a la obra! - Identifíquese
Preguntas de cierre
Reflexiona:
_ 16
www.desafiolatam.com