Je suis nouveau sur React Router et j'apprends qu'il existe de nombreuses façons de rediriger une page:
En utilisant
browserHistory.push("/path")
import { browserHistory } from 'react-router'; //do something... browserHistory.push("/path");
En utilisant
this.context.router.push("/path")
class Foo extends React.Component { constructor(props, context) { super(props, context); //do something... } redirect() { this.context.router.push("/path") } } Foo.contextTypes = { router: React.PropTypes.object }
Dans React Router v4, il y a
this.context.history.push("/path")
etthis.props.history.push("/path")
. Détails: Comment pousser vers l'historique dans React Router v4?
Je suis tellement confus par toutes ces options, y a-t-il un meilleur moyen de rediriger une page?
reactjs
redux
react-router
Liutong Chen
la source
la source
withRouter
Réponses:
En fait, cela dépend de votre cas d'utilisation.
1) Vous souhaitez protéger votre itinéraire des utilisateurs non autorisés
Si tel est le cas, vous pouvez utiliser le composant appelé
<Redirect />
et implémenter la logique suivante:Gardez à l'esprit que si vous voulez
<Redirect />
travailler comme vous le souhaitez, vous devez le placer à l'intérieur de la méthode de rendu de votre composant afin qu'il soit finalement considéré comme un élément DOM, sinon cela ne fonctionnera pas.2) Vous souhaitez rediriger après une certaine action (disons après la création d'un élément)
Dans ce cas, vous pouvez utiliser l'historique:
ou
Afin d'avoir accès à l'historique, vous pouvez envelopper votre composant avec un HOC appelé
withRouter
. Lorsque vous enveloppez votre composant avec, il passematch
location
et sehistory
propage. Pour plus de détails, veuillez consulter la documentation officielle de withRouter .Si votre composant est un enfant d'un
<Route />
composant, à savoir si elle est quelque chose comme<Route path='/path' component={myComponent} />
, vous ne devez pas envelopper votre composant avecwithRouter
, parce que<Route />
laissez - passermatch
,location
ethistory
à son enfant.3) Rediriger après avoir cliqué sur un élément
Il y a deux options ici. Vous pouvez utiliser
history.push()
en le passant à unonClick
événement:ou vous pouvez utiliser un
<Link />
composant:Je pense que la règle de base avec ce boîtier est d'essayer de l'utiliser en
<Link />
premier, je suppose surtout à cause des performances.la source
history
dans ses accessoiresthis.props.history.push('/path')
, cela signifie que le composant est un enfant de<Route/>
ou qu'il a unwithRouter
wrapper dans l'exportation correct?<Route path='/path' component={Comp}/>
, je suppose que tout simplementrender() { return <Comp/>}
dans une condition?this.props.history
mais je ne suis pas sûr si j'ai bien répondu à votre deuxième question? Que voulez-vous dire exactementroute to another component
?Maintenant, avec react-router
v15.1
et au -delà , nous pouvonsuseHistory
accrocher, c'est un moyen super simple et clair. Voici un exemple simple du blog source.Vous pouvez l'utiliser dans n'importe quel composant fonctionnel et hooks personnalisés. Et oui, cela ne fonctionnera pas avec les composants de classe comme tout autre hook.
En savoir plus à ce sujet ici https://reacttraining.com/blog/react-router-v5-1/#usehistory
la source
Vous pouvez également utiliser useHistory de la bibliothèque dom du routeur react;
https://reactrouter.com/web/api/Hooks/usehistory
la source
Un des moyens les plus simples: utilisez Link comme suit:
Si nous voulons couvrir toute la section div sous forme de lien:
la source
Vous pouvez également
Redirect
dans ceRoute
qui suit. C'est pour gérer les itinéraires invalides.la source