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
location
i history
podpowiada. 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
, location
i history
jej dziecka.
3) Przekieruj po kliknięciu elementu
Istnieją dwie opcje. Możesz użyć history.push()
, przekazując go do onClick
wydarzenia:
<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ść.