React-Router открыть ссылку в новой вкладке


89

Есть ли способ заставить React Router открывать ссылку в новой вкладке? Я попробовал это, но не вышло.

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

Можно взбить его, добавив что-то вроде onClick="foo"ссылки, как у меня выше, но это приведет к ошибке консоли.

Благодарю.

Ответы:


41

Я думаю, что у компонента Link нет реквизита для этого.

У вас может быть альтернативный способ, создав тег и используя метод makeHref миксина навигации для создания вашего URL-адреса.

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

здесь он вызывает функцию самовызова href, это вызовет повторную визуализацию ALERT!
Анупам Маурья

Я считаю, что функция makeHref была переименована в createHref и с тех пор удалена. stackoverflow.com/a/35066996/6004931 github.com/ReactTraining/history/issues/365
Ник Грэм

82

В React Router версии 5.0.1 и выше вы можете использовать:

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

47
какая сейчас версия React Router;)
Абхишек Налин

1
@AbhishekNalin How to get this.makeHref and send parameter in side this.makeHref
Dharmesh

15
In react-router 5.0.1, it seems adding target="_blank" is enough to do the trick.
mscrivo

7
Note this comment. Use rel='noopener noreferrer' if you use target="_blank"
Gaspar

Thank you! target="_blank" worked for me :) in react-router 5.0.1
Rachit Magon

34

We can use the following options:-

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

We can use either of three option to open in new tab by react routing.


some iPhones ignore "target='_blank'". It seems like this would still fail for those phones.
Deborah

3
Note about target='_blank': recommend adding rel='noopener noreferrer' to your <a> tag
Blundering Philosopher




6

В моем случае я использую другую функцию.

Функция

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

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

4

Самый простой способ - использовать свойство to:

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


2

Чтобы открыть URL-адрес в новой вкладке, вы можете использовать тег Link, как показано ниже:

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

Приятно иметь в виду, что <Link>элемент переводится в <a>элемент, и в соответствии с документами response-router-dom вы можете передавать любые реквизиты, которые вы хотите использовать, такие как title, id, className и т. Д.


0

target = "_ blank" достаточно, чтобы открыть в новой вкладке, когда вы используете response-router

например: <Link to={/admin/posts/error-post-list/${this.props.errorDate}} target="_blank"> View Details </Link>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.