Como estoy usando react-router para manejar mis rutas en una aplicación de reacción, tengo curiosidad por saber si hay una forma de redirigir a un recurso externo.
Digamos que alguien golpea:
example.com/privacy-policy
Me gustaría redirigir a:
example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
No encuentro exactamente ninguna ayuda para evitar escribirlo en JS simple en mi index.html cargando con algo como:
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
fuente
fuente
window.location.href
para tener una redirección formal.Respuestas:
Aquí hay una sola línea para usar React Router para redirigir a un enlace externo:
Utiliza el concepto de componente puro de React para reducir el código del componente a una sola función que, en lugar de representar nada, redirige el navegador a una URL externa.
Funciona tanto en React Router 3 como en 4.
fuente
No es necesario utilizar
<Link />
componentes de react-router.Si desea ir a un enlace externo, use una etiqueta de anclaje.
fuente
rel="noopener noreferrer"
al<a>
De hecho, terminé construyendo mi propio Componente.
<Redirect>
Toma información delreact-router
elemento para que pueda mantenerla en mis rutas. Como:Aquí está mi componente en caso de que alguien tenga curiosidad:
EDITAR - NOTA: Esto es con
react-router: 3.0.5
, no es tan simple en 4.xfuente
No necesita solicitar reaccionar enrutador. Esta acción se puede realizar de forma nativa y la proporciona el navegador.
Solo usa
window.location
fuente
Con el componente Link de react-router puedes hacerlo. En la opción " a " puede especificar 3 tipos de datos:
Para su ejemplo (enlace externo):
https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Puede hacer lo siguiente:
También puede pasar los accesorios en los que le gustaría estar, como título, identificación, nombre de clase, etc.
fuente
Usando parte de la información aquí, se me ocurrió el siguiente componente que puede usar dentro de sus declaraciones de ruta. Es compatible con React Router v4.
Está usando mecanografiado, pero debería ser bastante sencillo convertirlo a javascript nativo:
Y usar con:
fuente
Tuve suerte con esto:
fuente
No creo que React-Router proporcione este soporte. La documentación menciona
Puede intentar usar algo como React-Redirect en su lugar
fuente
Para ampliar la respuesta de Alan, puede crear un
<Route/>
que redirija a todos<Link/>
los atributos "a" que contengan "http:" o "https:" al recurso externo correcto.A continuación se muestra un ejemplo funcional de esto que se puede colocar directamente en su archivo
<Router>
.fuente
PARA V3, aunque puede funcionar para V4. Saliendo de la respuesta de Eric, necesitaba hacer un poco más, como manejar el desarrollo local donde 'http' no está presente en la URL. También estoy redirigiendo a otra aplicación en el mismo servidor.
Agregado al archivo del enrutador:
Y el componente:
fuente
Al usar React con TypeScript, obtiene un error ya que la función debe devolver un elemento react, no
void
. Así que lo hice de esta manera usando el método de renderizado de ruta (y usando React router v4):Donde en su lugar también podría usar
window.location.assign()
,window.location.replace()
etc.fuente
Si está utilizando el desgarro del lado del servidor, puede utilizar
StaticRouter
. Con sucontext
asprops
y luego agregando<Redirect path="/somewhere" />
componente en su aplicación. La idea es que cada vez que react-router coincida con un componente de redireccionamiento, agregará algo en el contexto que pasó al enrutador estático para hacerle saber que su ruta coincide con un componente de redireccionamiento. ahora que sabe que ha accedido a una redirección, solo tiene que comprobar si esa es la redirección que está buscando. luego simplemente redirigir a través del servidor.ctx.redirect('https://example/com')
.fuente
<Redirect push={ true } to="/pathtoredirect" />
Pude lograr una redirección en react-router-dom usando lo siguiente
En mi caso, estaba buscando una forma de redirigir a los usuarios cada vez que visitan la URL raíz
http://myapp.com
a otro lugar dentro de la aplicaciónhttp://myapp.com/newplace
. así que lo anterior ayudó.fuente