React-Router在新标签页中打开链接


85

有没有办法让React Router在新标签页中打开链接?我尝试了一下,但没有成功。

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

可以通过向onClick="foo"Link添加类似于我上面的内容来使其模糊,但是会出现控制台错误。

谢谢。

Answers:


36

我认为Link组件没有它的支持。

您可以通过创建标签并使用Navigation mixin的makeHref方法来创建网址的替代方法

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

在这里它是调用href自调用函数,它将导致重新呈现ALERT!
Anupam Maurya

74

在React Router 5.0.1及更高版本中,您可以使用:

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

47
什么是最新版本的React Router;)
Abhishek Nalin

1
@AbhishekNalin如何获取this.makeHref并在this.makeHref端发送参数
DDD

15
在react-router 5.0.1中,添加似乎target="_blank"足以解决问题。
mscrivo

5
注意评论。rel='noopener noreferrer'如果使用,请使用target="_blank"
加斯帕

谢谢!target="_blank"为我工作:)在react-router 5.0.1中
Rachit Magon 19/12/25

33

我们可以使用以下选项:

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

我们可以使用三个选项之一通过反应路由在新选项卡中打开。


一些iPhone会忽略“ target ='_ blank'”。这些手机似乎仍然无法通过。
黛博拉

3
备注target='_blank':建议添加rel='noopener noreferrer'到您的<a>标签
浮躁的哲学家





4

最简单的方法是使用“ to”属性:

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


1

要在新标签页中打开网址,可以使用以下链接标签:

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

请记住,该<Link>元素已转换为一个<a>元素,这很高兴,并且根据react-router-dom docs,您可以传递任何您想在其上使用的道具,例如title,id,className等。


0

使用react-router时,target =“ _ blank”足以在新选项卡中打开

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.