Accede a todo EDteam con un único pago¡Sube a premium con -50%!

Crea rutas con React Router en React

Aprende a utilizar React Router para el manejo de rutas en tu aplicación web con React.

Diseño web
5 minutos
Hace 5 años
Crea rutas con React Router en React

¡Hola! 🙌 soy Juan carlos del staff de EDteam y este es el primer blog que hago para todos ustedes. Asi que, demosle con todo el flow porque hablaremos sobre React Router 🔥

¿Qué es React Router?

Básicamente es un conjunto de componentes de navegación que podemos utilizar en nuestra aplicación web o aplicación con React Native. En este artículo nos vamos a enfocar en la parte web por lo que con esta librería podemos lograr lo siguiente:

  • Establecer rutas en nuestra aplicación (Ejem. Home, Inicio de sesión, etc.)
  • Crear páginas públicas y privadas.
  • Realizar redirecciones a otras páginas según ciertas condiciones
  • Acceder al historial de navegación
  • Crear rutas para páginas 404 (no encontradas)

Tal vez ahora te preguntes, Eso esta super y toda la vaina pero ¿cómo lo instalo en mi aplicación web?

No te preocupes que ahora vamos a incrementar el flow.. pasemos a modo sayayin 🔥

Seguramente ya has creado tu aplicación de React con create-react-app y lo siguiente que debes instalar es la dependencia react-router-dom.

Si deseas utilizar entornos de React cómo CodeSandBox o Stackblitz puedes hacerlo sin problema. Para fines de demostración lo haré en Stackblitz y podrás ver el código ahí.

Muy bien, ya que tenemos todo listo, vayamos de una al componente que estés usando para renderizar la información en pantalla sea App.js (create-react-app) o index.js si utilizas entornos de react en línea.

Hasta ahora tenemos nuestro componente sin ninguna modificación:

Componente 1

¡Ahora vamos a ponerle el sabor con todo el flow!

Haz el siguiente import de { BrowserRouter as Router, Route, Link} de la librería react-router-dom. Lo que estamos haciendo es importando estos componentes de navegación que se dividen en:

  • BrowserRouter (Router): Este inyecta propiedades a nuestro componente para poder acceder al historial de navegación, realizar redirecciones, etc.
  • Route: Es el componente que utilizamos para crear nuestras rutas a otros páginas (componentes)
  • Link: Este es utilizado para los enlaces (igual como etiquetas <a></a>)

Listo, ahora vamos a crear un pequeño menú para nuestra app para que no esté tan forever alone y lo haremos mediante una lista no ordenada <ul></ul> y haremos algunos cambios de estructura HTML e importamos la librería de EDteam: EDgrid

Luego de unos ajustes BOOM 💣💥

componente 2

Pensarás lo siguiente 😱Wow! pero que rayos hiciste. Se ve Genial my friend!! pues te explico con todo el flow:

  • Utilizamos un fragment <\> </> en el return del componente para agregar ahi todos los elementos (esto es propio de React) porque JSX solo permite renderizar un solo elemento y agregamos un contenedor para todos los demás items hijos.
  • Agregamos un título para subirle el ki a nuestro ejemplo y luego agregamos el componente Router . Dentro de este componente, creamos el menu y en cada <li> agregamos el componente Link con un destino.

Ahora vamos a crear las rutas para que imprima la información necesaria según el item del menu y para hacer esto, vamos a utilizar el componente Route el cual recibe entre sus principales propiedades un destino (path) y un componente a renderizar (component). Vamos a crear 3 componentes funcionales que son: Inicio, Info, Contacto y luego de crearlos lo utilizamos con Route

Componente 3

Routelo que haces es que cuando se acceda a la dirección /info imprima la información de ese componente que se especifica en la propiedad component. Si haces click ahora te llevará a la información de cada uno y estarás maravillado de esta magia tan genial que ni Disney tiene pa darte.

Pero esperame un momentito, tenemos un pequeño problema. Si haces click en cada uno de los enlaces te presenta la información del componente actual y del siguiente, lo cual no es muy bonito que digamos.

Para solucionar esto agrega la propiedad exact antes de el path en cada Route que hemos creado y listo.

1<Route exact path="/" component={Home}/> 2<Route exact path="/info" component={Info}/> 3<Route exact path="/contacto" component={Contacto}/> 4

Ahora si haces click nuevamente, ya funciona como debería, ¡con todo el flow! 👏

Por ultimo, vamos a establecer un ruta para páginas no encontradas (404) y mostrar un mensaje para ello. Primero vamos a crear el componente funcional PageNotFound

1import React from "react" 2 3const PageNotFound = () => ( 4//Fragment 5 <> 6 {/* Mensaje cuando llegue a página incorrecta */} 7 <p>Uy, llegaste a un mundo desconocido. Mejor regresa al inicio.</p> 8 </> 9) 10export default PageNotFound 11

Listo nuestro componente. Ahora, en nuestro archivo principal, tenemos que usar el componente Switch de React Router para que intercambie las rutas según el destino y si el usuario llega a una dirección incorrecta, que imprima la información del componente PageNotFound.

Solo necesitas importarlo junto a los demás componentes de React Router que has colocado anteriormente y luego tomas los Routes para ponerlos dentro del Switch:

1<Switch> 2 <Route exact path="/" component={Home}/> 3 <Route exact path="/info" component={Info}/> 4 <Route exact path="/contacto" component={Contacto}/> 5 <Route component={PageNotFound}/> 6</Switch> 7

Si te fijas, la última ruta no tiene un path definido y recibe como componente nuestro PageNotFound. Ahora si ingresas una url incorrecta, el Switch muestra el componente que hemos creado. Intenta con /contactox y verás la magia 😉

Aquí puedes ver el código funcionando:https://stackblitz.com/edit/example-react-router?embed=1&file=index.js&view=preview

Señoras y señores, hasta aquí ha sido este blog. Espero haberte ayudado a entender este tema de rutas en react y que puedas implementarlo en tus proyectos. Recuerda que tenemos una especialidad de React en EDteam donde tratamos más a fondo estos temas.

Ahora si, Hasta la vista My friends.... Ya tu sabeeeeeeee

Comentarios de los usuarios

Pregunta a ChatEDT