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.

mcd
fuente

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>
usuario1369825
fuente
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"));}} />
hydRAnger
fuente
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.

Gorakh Nath
fuente
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>
Abbos Tajimov
fuente
1
Funciona con 3.0.0, gracias
A7DC hace
14

Para un enlace externo, simplemente use un acor en lugar de Link:

<a rel="noopener noreferrer" href="http://url.com" target="_blank">Link Here</a>
Anthony Agbator
fuente
1
El motivo rel="noopener noreferrer"se puede encontrar aquí mathiasbynens.github.io/rel-noopener
Liron Lavi
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>
Ankit Kumar Rajpoot
fuente
4

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

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

Esto funciona bien para mi

<Link to={`link`} target="_blank">View</Link>
Ashad Nasim
fuente
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.

MMalke
fuente
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>

Shrutika Shrutika
fuente