Eigentlich hängt es von Ihrem Anwendungsfall ab.
1) Sie möchten Ihre Route vor nicht autorisierten Benutzern schützen
In diesem Fall können Sie die aufgerufene Komponente verwenden <Redirect />
und die folgende Logik implementieren:
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
Denken Sie daran, dass Sie, wenn Sie <Redirect />
wie erwartet arbeiten möchten , diese in die Rendermethode Ihrer Komponente einfügen sollten, damit sie schließlich als DOM-Element betrachtet werden kann, da sie sonst nicht funktioniert.
2) Sie möchten nach einer bestimmten Aktion umleiten (z. B. nach dem Erstellen eines Elements).
In diesem Fall können Sie den Verlauf verwenden:
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
oder
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
Um Zugriff auf den Verlauf zu erhalten, können Sie Ihre Komponente mit einem aufgerufenen HOC umschließen withRouter
. Wenn Sie Ihre Komponente damit umwickeln, geht sie vorbei match
location
und history
stützt. Weitere Informationen finden Sie in der offiziellen Dokumentation zu withRouter .
Wenn Ihre Komponente ein Kind eines ist <Route />
Komponente, das heißt , wenn es so etwas wie ist <Route path='/path' component={myComponent} />
, müssen Sie nicht Ihre Komponente wickeln mit withRouter
, weil <Route />
Pässe match
, location
und history
zu seinem Kind.
3) Weiterleiten nach Klicken auf ein Element
Hier gibt es zwei Möglichkeiten. Sie können es verwenden, history.push()
indem Sie es an ein onClick
Ereignis übergeben:
<div onClick={this.props.history.push('/path')}> some stuff </div>
oder Sie können eine <Link />
Komponente verwenden:
<Link to='/path' > some stuff </Link>
Ich denke, die Faustregel in diesem Fall ist, zuerst zu versuchen, es zu verwenden <Link />
, ich nehme an, besonders wegen der Leistung.