React-Router apre il collegamento in una nuova scheda


90

C'è un modo per far sì che React Router apra un collegamento in una nuova scheda? Ho provato questo e non ha funzionato.

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

È possibile confonderlo aggiungendo qualcosa di simile onClick="foo"al Link come quello che ho sopra, ma ci sarebbe un errore della console.

Grazie.

Risposte:


41

Penso che il componente Link non abbia gli oggetti di scena per questo.

Puoi avere un modo alternativo creando un tag e utilizzare il metodo makeHref del mixin di navigazione per creare il tuo URL

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

qui sta chiamando la funzione di auto chiamata href, causerà un nuovo rendering di ALERT!
Anupam Maurya

Credo che la funzione makeHref sia stata rinominata in createHref e da allora rimossa. stackoverflow.com/a/35066996/6004931 github.com/ReactTraining/history/issues/365
Nick Graham

82

In React Router versione 5.0.1 e successive, puoi utilizzare:

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

47
qual è la versione attuale di React Router;)
Abhishek Nalin

1
@AbhishekNalin Come ottenere this.makeHref e inviare il parametro a lato this.makeHref
Dharmesh

15
In react-router 5.0.1, sembra che l'aggiunta target="_blank"sia sufficiente per fare il trucco.
mscrivo

7
Nota questo commento. Usa rel='noopener noreferrer'se usitarget="_blank"
Gaspar

Grazie! target="_blank"ha funzionato per me :) in react-router 5.0.1
Rachit Magon

34

Possiamo utilizzare le seguenti opzioni: -

 // 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">

Possiamo utilizzare una delle tre opzioni per aprire in una nuova scheda reagendo al routing.


alcuni iPhone ignorano "target = '_ blank'". Sembra che questo fallirebbe ancora per quei telefoni.
Deborah

3
Nota su target='_blank': consiglia di aggiungere rel='noopener noreferrer'al <a>tag
Blundering Philosopher

19

Puoi usare "{}" per il bersaglio, quindi jsx non piangerà

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



6

Nel mio caso, sto usando un'altra funzione.

Funzione

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

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

4

Il modo più semplice è usare la proprietà 'to':

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

2

questo funziona bene per me

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

2

Per aprire un URL in una nuova scheda, puoi utilizzare il tag Link come di seguito:

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

È bello tenere presente che l' <Link>elemento viene tradotto in un <a>elemento e, come per i documenti di react-router-dom , puoi passare tutti gli oggetti di scena che desideri siano presenti su di esso come titolo, id, className, ecc.


0

target = "_ blank" è sufficiente per aprirsi in una nuova scheda, quando si utilizza react-router

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.