In realtà dipende dal tuo caso d'uso.
1) Vuoi proteggere il tuo percorso da utenti non autorizzati
In tal caso è possibile utilizzare il componente chiamato <Redirect />e implementare la seguente logica:
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
Tieni presente che se vuoi <Redirect />lavorare nel modo in cui ti aspetti, dovresti posizionarlo all'interno del metodo di rendering del tuo componente in modo che alla fine dovrebbe essere considerato come un elemento DOM, altrimenti non funzionerà.
2) Vuoi reindirizzare dopo una certa azione (diciamo dopo aver creato un oggetto)
In tal caso puoi usare la cronologia:
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
o
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
Per avere accesso alla cronologia, puoi avvolgere il tuo componente con un HOC chiamato withRouter. Quando avvolgi il tuo componente con esso, passa match locatione historypuntella. Per maggiori dettagli, dai un'occhiata alla documentazione ufficiale di withRouter .
Se il componente è un bambino di un <Route />componente, vale a dire se si tratta di qualcosa di simile <Route path='/path' component={myComponent} />, non c'è bisogno di avvolgere il componente con withRouter, perché <Route />passa match, locatione historyal suo bambino.
3) Reindirizza dopo aver fatto clic su un elemento
Ci sono due opzioni qui. Puoi usarlo history.push()passandolo a un onClickevento:
<div onClick={this.props.history.push('/path')}> some stuff </div>
oppure puoi usare un <Link />componente:
<Link to='/path' > some stuff </Link>
Penso che la regola pratica con questo caso sia provare a usare <Link />prima, suppongo soprattutto a causa delle prestazioni.