React.js #8: Añadir rutas a nuestro proyecto con React Router

En React.js existe un librería llamada React Router que nos permite añadir rutas a cualquier proyecto React. En esta entrada, lo que vamos a hacer va a ser crear una navegación por rutas. Crearemos un componente por cada ruta para que se muestre uno u otro según la ruta en la que estemos. También, veremos cómo pasar parámetros a las rutas y cómo gestionar el acceso a una página no existente (404).

Instalar React Router

Instalamos la librería mencionada anteriormente:

 

Crear rutas

Una vez finalice, vamos a cambiar un poco la estructura del proyecto. Creamos un directorio pages en src. Aquí pondremos todos los componentes que seán páginas. De momento, vamos a crear 3 que serán Home.js (que será el listado de posts), About.js (que sería un texto de sobre mí) y Contact.js (que sería un formulario de contacto).

pages/Home.js:

 

pages/About.js

 

pages/Contact.js

 

Cuando tengamos esto, vamos a ir a crear el enrutador. Para ello vamos al App.js y lo modificamos para que quede así:

Como puedes ver, hemos quitado el componente <PostList /> porque ya está en la página Home.js. Estamos importando los componentes necesarios para crear el enrutador (router) de la librería react-router-dom y las utilizamos en el método render.

Utilizamos el componente BrowserRouter que es un enrutador que utiliza la API de history de HTML5 para mantener sincronizada la UI con la ruta que toque.

Después, estamos utilizando el componente Switch que es para que solamente renderice el primer componente que coincida con la ruta. Si no utilizásemos, Switch, nos renderizaría todos los componentes Route que coincidieran con la ruta a la que estamos accediendo.

Y finalmente utilizamos el componente Route que es el componente que define las rutas ( path) y el componente que debe renderizar ( component).

Ahora, debemos modificar el Header.js para que el menú de navegación seán enlaces a las rutas creadas. Abrimos el archivo y debería quedar así:

Importamos el componente Link de la librería y lo utilizamos para crear los links a las rutas creadas anteriormente.

Si quisieramos añadir una clase CSS para cambiar el estilo del enlace (poner en negrita, subrayado, etc.) que coincida con la ruta dónde estemos, deberemos utilizar el componente NavLink en vez de Link. Más información aquí.

Con todo esto, ya deberíamos tener una navegación por rutas creada con React Router en nuestra aplicación con React.js:

 

Crear rutas con parámetros

Ya hemos visto como crear rutas estáticas (sin parámetros), ahora vamos a ver cómo crear rutas con parámetros. Vamos a aprovechar el listado de posts y vamos a crear una ruta que acceda al detalle del post, es decir, que solamente aparezca el post que tenga el id que le pasemos por parámetro.

Creamos la página Post.js:

Obtenemos el id pasado por parámetro con this.props.match.params.id y se lo pasamos a la API que vimos en anteriores posts, asignamos lo que devuelve la API a una variable del estado (state) llamada post y le pasamos al componente PostItem el post por las propiedades.

Ahora vamos al componente PostItem y lo modificamos para que quede así:

Le añadimos el enlace para poder acceder a la ruta creada pasándole por parámetro el id del post.

Hecho todo esto, deberíamos ver algo así:

 

Gestionar el acceso a una página no existente (404)

Con React Router también podemos gestionar el acceso a una página no existente y que nos muestre una página tipo «Not found» o algo así. Para ello, creamos un archivo en src/pages/NotFound.js:

Ahora, vamos al App.js y añadimos al final del listado de rutas la siguientes líneas:

Si entramos en una ruta que no existe en nuestro listado de rutas, nos aparecerá el mensaje que hayamos puesto en el componente NotFound.js.

 

Código completo de la entrada: https://github.com/fullstackseriescom/aprende-reactjs/tree/master/08-react-router

Ejemplo en vivo de la entrada: https://repl.it/@vreaxe/Reactjs-React-Router

-


Aloja tu proyecto en DigitalOcean: Obtén $200 de crédito gratis al registrarte a través de este enlace.

Si hay cualquier tipo de error en el post o te surge cualquier duda, no dudes en ponerlo en los comentarios o enviarme un correo desde la página de contacto.

? CONTACTAR

4 comentarios en “React.js #8: Añadir rutas a nuestro proyecto con React Router

  1. Al colocar mi link en un … to»/contact», me hace el cambio en la URL, pero no me carga el componente. en el contenido.
    en cambio al ponerlo fuera del si me carga los componentes, ¿a que se debe?

    Que tengas un buen dia!

    cuento con:
    // lo carga perfecto, fuera del componente de MDB

    {
    items && items.map(
    (item,key) => {item.title} )}

    //con mi routes correspondientes
    render(){
    const {items} = this.props;

  2. hasta cuantas rutas puedo ingresar debido que en mi proyecto tendré muchas rutas y quisiera saber como puedo aquello hacerlo modular.

Deja una respuesta

  Acepto la política de privacidad