Puisque j'utilise react-router pour gérer mes itinéraires dans une application react, je suis curieux de savoir s'il existe un moyen de rediriger vers une ressource externe.
Dites que quelqu'un frappe:
example.com/privacy-policy
Je voudrais qu'il redirige vers:
example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Je ne trouve aucune aide pour éviter de l'écrire en JS brut à mon index.html en chargeant avec quelque chose comme:
if ( window.location.path === "privacy-policy" ){
window.location = "example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies"
}
javascript
reactjs
redirect
react-router
react-router-redux
Eric Hodonsky
la source
la source
window.location.href
pour avoir une redirection formelle.Réponses:
Voici une ligne unique pour utiliser React Router pour rediriger vers un lien externe:
Il utilise le concept de composant pur React pour réduire le code du composant à une seule fonction qui, au lieu de rendre quoi que ce soit, redirige le navigateur vers une URL externe.
Fonctionne à la fois sur React Router 3 et 4.
la source
Il n'est pas nécessaire d'utiliser le
<Link />
composant de react-router.Si vous souhaitez accéder au lien externe, utilisez une balise d'ancrage.
la source
rel="noopener noreferrer"
au<a>
J'ai fini par construire mon propre composant.
<Redirect>
Il prend des informations sur l'react-router
élément pour que je puisse les conserver dans mes itinéraires. Tel que:Voici mon composant au cas où tout le monde est curieux:
EDIT - NOTE: C'est avec
react-router: 3.0.5
, ce n'est pas si simple en 4.xla source
Il n'a pas besoin de demander le routeur de réaction. Cette action peut être effectuée de manière native et est fournie par le navigateur.
juste utiliser
window.location
la source
Avec le composant Link de react-router, vous pouvez le faire. Dans le prop " to ", vous pouvez spécifier 3 types de données:
Pour votre exemple (lien externe):
https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Vous pouvez faire ce qui suit:
Vous pouvez également transmettre les accessoires que vous souhaitez utiliser, tels qu'un titre, un identifiant, un nom de classe, etc.
la source
En utilisant certaines des informations ici, j'ai trouvé le composant suivant que vous pouvez utiliser dans vos déclarations d'itinéraire. Il est compatible avec React Router v4.
Il utilise du typographie, mais devrait être assez simple pour convertir en javascript natif:
Et utiliser avec:
la source
J'ai eu de la chance avec ceci:
la source
Je ne pense pas que React-Router offre ce support. La documentation mentionne
Vous pouvez essayer d'utiliser quelque chose comme React-Redirect à la place
la source
Pour développer la réponse d'Alan, vous pouvez créer un
<Route/>
qui redirige tous<Link/>
les attributs «vers» contenant «http:» ou «https:» vers la bonne ressource externe.Vous trouverez ci-dessous un exemple de travail qui peut être placé directement dans votre
<Router>
.la source
POUR V3, bien que cela puisse fonctionner pour V4. En partant de la réponse d'Eric, j'avais besoin de faire un peu plus, comme gérer le développement local où «http» n'est pas présent sur l'url. Je redirige également vers une autre application sur le même serveur.
Ajouté au fichier du routeur:
Et le composant:
la source
En utilisant React avec Typescript, vous obtenez une erreur car la fonction doit renvoyer un élément react, pas
void
. Je l'ai donc fait de cette façon en utilisant la méthode de rendu Route (et en utilisant le routeur React v4):Où vous pouvez utiliser à la place
window.location.assign()
,window.location.replace()
etc.la source
Si vous utilisez le rendu côté serveur, vous pouvez utiliser
StaticRouter
. Avec votre composant aucontext
furprops
et à mesure , puis en ajoutant<Redirect path="/somewhere" />
dans votre application. L'idée est que chaque fois que react-router correspond à un composant de redirection, il ajoutera quelque chose dans le contexte que vous avez transmis au routeur statique pour vous faire savoir que votre chemin correspond à un composant de redirection. maintenant que vous savez que vous avez frappé une redirection, il vous suffit de vérifier si c'est la redirection que vous recherchez. puis redirigez simplement via le serveur.ctx.redirect('https://example/com')
.la source
<Redirect push={ true } to="/pathtoredirect" />
J'ai pu réaliser une redirection dans react-router-dom en utilisant ce qui suit
Pour mon cas, je cherchais un moyen de rediriger les utilisateurs chaque fois qu'ils visitent l'URL racine
http://myapp.com
vers un autre endroit dans l'applicationhttp://myapp.com/newplace
. donc ce qui précède a aidé.la source