React-Router abre el enlace en una nueva pestaña


85

¿Hay alguna forma de hacer que React Router abra un enlace en una nueva pestaña? Intenté esto y no funcionó.

<Link to="chart" target="_blank" query={{test: this.props.test}} >Test</Link>

Es posible suavizarlo agregando algo como onClick="foo"el enlace que tengo arriba, pero habría un error de consola.

Gracias.

Respuestas:


36

Creo que el componente Link no tiene los accesorios necesarios.

Puede tener una forma alternativa creando una etiqueta y utilizando el método makeHref de Navigation mixin para crear su URL

<a target='_blank' href={this.makeHref(routeConsts.CHECK_DOMAIN, {},
   { realm: userStore.getState().realms[0].name })}>
        Share this link to your webmaster
</a>

aquí está llamando a la función de auto-llamada href, ¡causará que se vuelva a renderizar ALERTA!
Anupam Maurya

74

En React Router versión 5.0.1 y superior, puede usar:

<Link to="route" target="_blank" onClick={(event) => {event.preventDefault(); window.open(this.makeHref("route"));}} />

47
cuál es la versión actual de React Router;)
Abhishek Nalin

1
@AbhishekNalin Cómo obtener this.makeHref y enviar el parámetro en el lado this.makeHref
DDD

15
En react-router 5.0.1, parece que agregar target="_blank"es suficiente para hacer el truco.
mscrivo

6
Tenga en cuenta este comentario. Úselo rel='noopener noreferrer'si usatarget="_blank"
Gaspar

¡Gracias! target="_blank"funcionó para mí :) en react-router 5.0.1
Rachit Magon

33

Podemos utilizar las siguientes opciones: -

 // first option is:-
    <Link to="myRoute" params={myParams} target="_blank">

 // second option is:-
    var href = this.props.history.createHref('myRoute', myParams);
    <a href={href} target="_blank">

 //third option is:-
    var href = '/myRoute/' + myParams.foo + '/' + myParams.bar;
    <a href={href} target="_blank">

Podemos usar cualquiera de las tres opciones para abrir una nueva pestaña reaccionando enrutamiento.


algunos iPhones ignoran "target = '_ blank'". Parece que esto todavía fallaría para esos teléfonos.
Deborah

3
Nota sobre target='_blank': recomiende agregar rel='noopener noreferrer'a su <a>etiqueta
Filósofo torpe

16

Puedes usar "{}" para el objetivo, entonces jsx no llorará

<Link target={"_blank"} to="your-link">Your Link</Link>

1
Funciona con 3.0.0, gracias
A7DC hace



6

En mi caso, estoy usando otra función.

Función

 function openTab() {
    window.open('https://play.google.com/store/apps/details?id=com.drishya');
  }

  <Link onClick={openTab}></Link>

4

La forma más simple es usar la propiedad 'to':

<Link to="chart" target="_blank" to="http://link2external.page.com" >Test</Link>

2

Esto funciona bien para mi

<Link to={`link`} target="_blank">View</Link>

1

Para abrir una URL en una nueva pestaña, puede utilizar la etiqueta Enlace como se muestra a continuación:

<Link to="/yourRoute" target="_blank">
    Open YourRoute in a new tab
</Link>

Es bueno tener en cuenta que el <Link>elemento se traduce a un <a>elemento y, según los documentos de react-router-dom , puede pasar cualquier accesorio que le gustaría incluir, como título, id, className, etc.


0

target = "_ blank" es suficiente para abrir en una nueva pestaña, cuando estás usando react-router

por ejemplo: <Link to={/admin/posts/error-post-list/${this.props.errorDate}} target="_blank"> View Details </Link>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.