En fait, cela dépend de votre cas d'utilisation.
1) Vous voulez protéger votre route contre les utilisateurs non autorisés.
Si c'est le cas, vous pouvez utiliser le composant appelé <Redirect />
et peut mettre en œuvre la logique suivante :
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
Gardez à l'esprit que si vous voulez <Redirect />
pour qu'il fonctionne comme vous le souhaitez, vous devez le placer à l'intérieur de la méthode de rendu de votre composant afin qu'il soit éventuellement considéré comme un élément DOM, sinon cela ne fonctionnera pas.
2) Vous souhaitez effectuer une redirection après une certaine action (disons après la création d'un élément).
Dans ce cas, vous pouvez utiliser l'historique :
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
o
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
Afin d'avoir accès à l'historique, vous pouvez envelopper votre composant avec un HOC appelé withRouter
. Lorsque vous enveloppez votre composant avec elle, elle passe match
location
y history
accessoires. Pour plus de détails, veuillez consulter la documentation officielle de l'application avecRouter .
Si votre composant est l'enfant d'un <Route />
c'est-à-dire si c'est quelque chose comme <Route path='/path' component={myComponent} />
vous n'avez pas besoin d'envelopper votre composant avec withRouter
parce que <Route />
passe match
, location
y history
à son enfant.
3) Redirection après avoir cliqué sur un élément
Il y a deux options ici. Vous pouvez utiliser history.push()
en le passant à un onClick
événement :
<div onClick={this.props.history.push('/path')}> some stuff </div>
ou vous pouvez utiliser un <Link />
composant :
<Link to='/path' > some stuff </Link>
Je pense que la règle générale dans ce cas est d'essayer d'utiliser <Link />
d'abord, je suppose, surtout en raison des performances.
0 votes
Vous utilisez la v4 oui ?
1 votes
Le lien vers l'autre pile que vous avez posté est assez clair, je recommanderais d'utiliser
withRouter