En realidad, depende de su caso de uso.
1) Quiere proteger su ruta de usuarios no autorizados
Si ese es el caso, puede usar el componente llamado <Redirect />
y puede implementar la siguiente lógica:
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
Tenga en cuenta que si desea <Redirect />
trabajar de la manera que espera, debe colocarlo dentro del método de renderizado de su componente para que eventualmente se considere como un elemento DOM; de lo contrario, no funcionará.
2) Desea redirigir después de una determinada acción (digamos después de crear un elemento)
En ese caso, puede usar el historial:
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
o
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
Para tener acceso al historial, puede envolver su componente con un HOC llamado withRouter
. Cuando envuelve su componente con él, pasa match
location
y se history
apoya. Para obtener más detalles, consulte la documentación oficial de withRouter .
Si el componente es un niño de un <Route />
componente, es decir, si se trata de algo así <Route path='/path' component={myComponent} />
, usted no tiene que ajustar su componente con withRouter
, ya que <Route />
los pases match
, location
y history
a su hijo.
3) Redirigir después de hacer clic en algún elemento
Aquí hay dos opciones. Puede usar history.push()
pasándolo a un onClick
evento:
<div onClick={this.props.history.push('/path')}> some stuff </div>
o puede utilizar un <Link />
componente:
<Link to='/path' > some stuff </Link>
Creo que la regla general con este caso es intentar usar <Link />
primero, supongo que especialmente por el rendimiento.