Właściwie to zależy od twojego przypadku użycia.
1) Chcesz chronić swoją trasę przed nieautoryzowanymi użytkownikami
W takim przypadku można użyć wywoływanego komponentu <Redirect />i zaimplementować następującą logikę:
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
Pamiętaj, że jeśli chcesz <Redirect />działać zgodnie z oczekiwaniami, powinieneś umieścić go wewnątrz metody renderowania swojego komponentu, aby ostatecznie został uznany za element DOM, w przeciwnym razie nie zadziała.
2) Chcesz przekierować po wykonaniu określonej czynności (powiedzmy po utworzeniu elementu)
W takim przypadku możesz skorzystać z historii:
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
lub
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
Aby mieć dostęp do historii, możesz opakować swój komponent w HOC o nazwie withRouter. Kiedy otoczysz nim swój komponent, przechodzi match locationi historypodpowiada. Aby uzyskać więcej informacji, zapoznaj się z oficjalną dokumentacją withRouter .
Jeśli urządzenie jest dzieckiem <Route />elementu, czyli czy jest coś takiego <Route path='/path' component={myComponent} />, że nie trzeba owinąć składnik z withRouter, ponieważ <Route />podań match, locationi historyjej dziecka.
3) Przekieruj po kliknięciu elementu
Istnieją dwie opcje. Możesz użyć history.push(), przekazując go do onClickwydarzenia:
<div onClick={this.props.history.push('/path')}> some stuff </div>
lub możesz użyć <Link />komponentu:
<Link to='/path' > some stuff </Link>
Myślę, że praktyczną zasadą w tym przypadku jest próba użycia w <Link />pierwszej kolejności, myślę, że szczególnie ze względu na wydajność.