React Router 4 es la herramienta perfecta para vincular la URL y su aplicación React. React Router es la biblioteca de enrutamiento React de facto, y es uno de los proyectos más populares construido sobre React.
- Instalación
- Tipos de rutas
- Componentes
- BrowserRouter
- Enlace
- Ruta
- Coincidir con varios caminos
- Renderizado en línea
- Coincidir con el parámetro de ruta dinámica
Este tutorial presenta React Router 4, la última versión estable
React Router es la biblioteca de enrutamiento React de facto, y es uno de los proyectos más populares construido sobre React.
React en su esencia es una biblioteca muy simple y no dicta nada sobre el enrutamiento.
El enrutamiento en una aplicación de una sola página es la forma de introducir algunas funciones para navegar por la aplicación a través de enlaces, que sonprevistoen aplicaciones web normales:
- El navegador debecambiar la URLcuando navega a una pantalla diferente
- Enlace profundodebería funcionar: si apunta el navegador a una URL, la aplicación debería reconstruir la misma vista que se presentó cuando se generó la URL.
- losbotón de retroceso (y avance) del navegadordebería funcionar como se esperaba.
Enrutar enlaces junto con la navegación de su aplicación con las funciones de navegación que ofrece el navegador.: laBarra de direccióny elbotones de navegacion.
React Router ofrece una forma de escribir su código para quemostrará ciertos componentes de su aplicación solo si la ruta coincide con lo que define.
Instalación
Connpm:
npm install react-router-dom
Tipos de rutas
React Router proporciona dos tipos diferentes de rutas:
BrowserRouter
HashRouter
Uno crea URL clásicas, el otro crea URL con el hash:
https://application.com/dashboard /* BrowserRouter */
https://application.com/#/dashboard /* HashRouter */
Cuál usar es dictado principalmente por los navegadores que necesita admitir.BrowserRouter
usa elAPI de historial, que es relativamente reciente y no es compatible con IE9 y versiones anteriores. Si no tiene que preocuparse por los navegadores más antiguos, es la opción recomendada.
Componentes
Los 3 componentes con los que interactuarás más cuando trabajes con React Router son:
BrowserRouter
, generalmente alias comoRouter
Link
Route
BrowserRouter
envuelve todos los componentes de su ruta.
Link
Los componentes se utilizan, como puede imaginar, para generar enlaces a sus rutas.
Route
Los componentes son responsables de mostrar (u ocultar) los componentes que contienen.
BrowserRouter
A continuación, se muestra un ejemplo sencillo del componente BrowserRouter. Lo importa desde react-router-dom y lo usa para empaquetar toda su aplicación:
import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter as Router } from 'react-router-dom'
ReactDOM.render(
<Router>
<div>
<!– –>
</div>
</Router>,
document.getElementById(‘app’)
)
Un componente BrowserRouter solo puede tener un elemento hijo, por lo que envolvemos todo lo que vamos a agregar en undiv
elemento.
Enlace
El componente Link se utiliza para activar nuevas rutas. Lo importas desdereact-router-dom
, y puede agregar los componentes Link para apuntar a diferentes rutas, con elto
atributo:
import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter as Router, Link } from 'react-router-dom'
ReactDOM.render(
<Router>
<div>
<aside>
<Link to={/dashboard
}>Dashboard</Link>
<Link to={/about
}>About</Link>
</aside>
<!– –>
</div>
</Router>,
document.getElementById(‘app’)
)
Ruta
Ahora agreguemos el componente Ruta en el fragmento anterior para que las cosas realmente funcionen como queremos:
import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter as Router, Link, Route } from 'react-router-dom'
const Dashboard = () => (
<div>
<h2>Dashboard</h2>
…
</div>
)
const About = () => (
<div>
<h2>About</h2>
…
</div>
)
ReactDOM.render(
<Router>
<div>
<aside>
<Link to={/
}>Dashboard</Link>
<Link to={/about
}>About</Link>
</aside>
<span style="color:#f92672"><</span><span style="color:#a6e22e">main</span><span style="color:#f92672">></span>
<span style="color:#f92672"><</span><span style="color:#a6e22e">Route</span> <span style="color:#a6e22e">exact</span> <span style="color:#a6e22e">path</span><span style="color:#f92672">=</span><span style="color:#e6db74">'/'</span> <span style="color:#a6e22e">component</span><span style="color:#f92672">=</span>{<span style="color:#a6e22e">Dashboard</span>} <span style="color:#f92672">/></span>
<span style="color:#f92672"><</span><span style="color:#a6e22e">Route</span> <span style="color:#a6e22e">path</span><span style="color:#f92672">=</span><span style="color:#e6db74">'/about'</span> <span style="color:#a6e22e">component</span><span style="color:#f92672">=</span>{<span style="color:#a6e22e">About</span>} <span style="color:#f92672">/></span>
<span style="color:#f92672"><</span><span style="color:#960050;background-color:#1e0010">/main></span>
<span style="color:#f92672"><</span><span style="color:#960050;background-color:#1e0010">/div></span>
</Router>,
document.getElementById(‘app’)
)
Mira este ejemplo en Glitch:https://glitch.com/edit/#!/flaviocopes-react-router-v4/
Cuando la ruta coincide/
, la aplicación muestra elTablerocomponente.
Cuando se cambia la ruta, haga clic en el enlace "Acerca de" para/about
, el componente Tablero se elimina y elSobreEl componente se inserta en el DOM.
Observe laexact
atributo. Sin esto,path="/"
también coincidiría/about
, ya que/
está contenido en la ruta.
Coincidir con varios caminos
Puede hacer que una ruta responda a múltiples rutas usando una expresión regular, porquepath
puede ser una cadena de expresiones regulares:
<Route path='/(about|who)/' component={Dashboard} />
Renderizado en línea
En lugar de especificar uncomponent
propiedad enRoute
, puede establecer unrender
apuntalar:
<Route
path='/(about|who)/'
render={() => (
<div>
<h2>About</h2>
...
</div>
)}
/>
Coincidir con el parámetro de ruta dinámica
Ya viste cómo usar rutas estáticas como
const Posts = () => (
<div>
<h2>Posts</h2>
...
</div>
)
//…
<Route exact path="/posts" component={Posts} />
A continuación, se explica cómo manejar rutas dinámicas:
const Post = ({match}) => (
<div>
<h2>Post #{match.params.id}</h2>
...
</div>
)
//…
<Route exact path="/post/:id" component={Post} />
En su componente de ruta puede buscar los parámetros dinámicos enmatch.params
.
match
también está disponible en rutas renderizadas en línea, y esto es especialmente útil en este caso, porque podemos usar elid
parámetro para buscar los datos de la publicación en nuestra fuente de datos antes de renderizar la publicación:
const posts = [
{ id: 1, title: 'First', content: 'Hello world!' },
{ id: 2, title: 'Second', content: 'Hello again!' }
]
const Post = ({post}) => (
<div>
<h2>{post.title}</h2>
{post.content}
</div>
)
//…
<Route exact path="/post/:id" render={({match}) => (
<Post post={posts.find(p => p.id === match.params.id)} />
)} />
Descarga mi gratisReact Handbook
Más tutoriales de react:
- Un ejemplo de aplicación simple de React: obtenga información de los usuarios de GitHub a través de la API
- Construye un contador simple con React
- Configuración de VS Code para el desarrollo de React
- Cómo pasar accesorios a un componente secundario a través de React Router
- Crea una aplicación con Electron y React
- Tutorial: crea una hoja de cálculo usando React
- La hoja de ruta para aprender React
- Aprenda a usar Redux
- Empezando con JSX
- Componentes con estilo
- Introducción a Redux Saga
- Introducción a React Router
- Introducción a React
- Reaccionar componentes
- El DOM virtual
- Reaccionar eventos
- El estado de reacción
- Reaccionar apoyos
- El fragmento de reacción
- La API React Context
- Reaccionar PropTypes
- Reaccionar conceptos: declarativo
- Reaccionar: Cómo mostrar un componente diferente al hacer clic
- Cómo hacer un bucle dentro de React JSX
- Props vs State en React
- ¿Deberías usar jQuery o React?
- ¿Cuánto JavaScript necesitas saber para usar React?
- Introducción a Gatsby
- Cómo hacer referencia a un elemento DOM en React
- Flujo de datos unidireccional en React
- Reaccionar componentes de orden superior
- Reaccionar eventos del ciclo de vida
- Concepto de reacción: inmutabilidad
- Concepto de reacción: Pureza
- Introducción a React Hooks
- Introducción a create-react-app
- Concepto de reacción: Composición
- Reaccionar: componentes de presentación frente a contenedores
- División de código en React
- Representación del lado del servidor con React
- Cómo instalar React
- CSS en React
- Usando SASS en React
- Manejo de formularios en React
- Reaccionar StrictMode
- Reaccionar portales
- Reaccionar accesorios de renderizado
- Prueba de componentes de React
- Cómo pasar un parámetro a los controladores de eventos en React
- Cómo manejar errores en React
- Cómo devolver múltiples elementos en JSX
- Representación condicional en React
- React, cómo transferir accesorios a componentes secundarios
- Cómo obtener el valor de un elemento de entrada en React
- Cómo utilizar el gancho useState React
- Cómo usar el gancho useCallback React
- Cómo utilizar el gancho useEffect React
- Cómo utilizar el gancho useMemo React
- Cómo utilizar el gancho useRef React
- Cómo usar el gancho useContext React
- Cómo utilizar el gancho useReducer React
- Cómo conectar su aplicación React a un backend en el mismo origen
- El tutorial de Reach Router
- Cómo utilizar las herramientas de desarrollo de React
- Cómo aprender React
- Cómo depurar una aplicación React
- Cómo renderizar HTML en React
- Cómo arreglar el error `dangerouslySetInnerHTML` no coincidió en React
- Cómo solucioné un problema con el estado del formulario de inicio de sesión de React y el autocompletado del navegador
- Cómo configurar HTTPS en una aplicación React en localhost
- Cómo corregir el error "no se puede actualizar un componente mientras se renderiza un componente diferente" en React
- ¿Puedo usar React hooks dentro de un condicional?
- Usar useState con un objeto: cómo actualizar
- Cómo moverse por bloques de código con React y Tailwind
- Reaccionar, enfocar un elemento en Reaccionar cuando se agrega al DOM
- Reaccionar, editar texto con doble clic