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 locationy se historyapoya. 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, locationy historya 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 onClickevento:
<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.