Url react路由器支持相对链接吗?

Url react路由器支持相对链接吗?,url,reactjs,Url,Reactjs,我在这个网址上: /path1/path2 然后: 它似乎起了作用:它已转到最后一个/,并为其添加了新路径。但是,事实上,当它更改地址栏中的url时,不会发生导航 看起来链接必须是绝对URL?根据,链接必须是绝对的: 链接的to属性必须是a,它可以是字符串(其中明确声明 不支持相对路径 ),或具有路径名属性的对象,该属性也是绝对的(by) 存在一个错误,这似乎表明将来可能支持相对路径 这里所说的一切都适用于react路由器2.x版及以上版本。是。使用图书馆。它是由瑞安·弗洛伦斯(Ryan Fl

我在这个网址上:

/path1/path2
然后:

它似乎起了作用:它已转到最后一个
/
,并为其添加了新路径。但是,事实上,当它更改地址栏中的url时,不会发生导航

看起来链接必须是绝对URL?

根据,链接必须是绝对的:

链接的
to
属性必须是a,它可以是字符串(其中明确声明

不支持相对路径

),或具有
路径名
属性的对象,该属性也是绝对的(by)

存在一个错误,这似乎表明将来可能支持相对路径

这里所说的一切都适用于
react路由器
2.x版及以上版本。

是。使用图书馆。它是由瑞安·弗洛伦斯(Ryan Florence)写的,他是react router的原始作者之一

要使用您的示例,您需要使用:

{ RelativeLink } = require 'react-router-relative-links'
...
<RelativeLink to="./path3">My link text</RelativeLink>
{RelativeLink}=需要“反应路由器相对链接”
...
我的链接文本

不支持,但您可以轻松生成绝对路径:

<Link to={this.props.location.pathname + '/path3'}>

在react路由器v4中支持相对路径。
history
库解析相对路径“就像浏览器一样”,以便

<Link to="two" />
在url
site.com/path/one
将重定向到
site.com/path/two
site.com/three?foo=bar

但是,
NavLink
不能使用相对路径名,因为它不能解析自己的相对路径(这是非常重要的)。然而,有一些社区软件包用于此,但我还没有测试它们

或者,这就是我要做的,您可以从父路由(或从上下文
router.Route.match
)获取
match
对象,并使用它在NavLink中构建您的相对

<NavLink to={`${match.url}/three`} />


这样,您的组件可以独立于其父路由工作。

实际上,路由器支持相对链接

给定URL,如/clients/invoice/123,行为是:


您还可以使用
this.props.match.url
,因为
match
对象具有
url
对象,该对象是当前加载的路径(您当前所在的页面)

最后,您可以链接
/path1/path2
,并像这样构建动态相对路径
this.props.match.url+/path1/path2

例如:


路径名

试试
,因为您已经在路径2上了,您只需要转到下面的一层,假设路径3是路径2下面的下一层,您确定要使用
链接
标记而不是
a
<代码>链接
用于样式表,并在标题中使用-不用于可单击的链接。它也没有
to
属性。@PinkTurtle您想到了错误的
链接。这是react router提供的
组件,感谢Anil_M。同样的问题:即使我们最终在浏览器地址栏中找到了正确的路径,路由器也不会匹配路由,除非它以“/”开头。changelog中的示例是一个绝对url,因此我倾向于认为它需要绝对路径。你可以看到,GitHub上实际上有一个关于这一点的链接。不总是有效的,例如,当用户发送一个指向某个子页面的链接时,就像我发送给某人一样,他打开了它。上述解决方案行不通。它会在链接中添加一个额外的/path3…谢谢你ebrehault…如果你试图附加到当前的url,这就像你想要的一样,一旦你用路由器
导入{withRouter}从'react router dom
一个如何附加到路径?我真的不明白为什么应该生成site/path/two而不是site/path/one/two。。。追加似乎是一个常见的用例,如果追加是默认行为,那么只需执行与HTML
a
标记上的正常
href
相同的操作,就可以轻松访问站点/path/two(至少它会尝试,我不确定是否存在转角情况)。如果您位于
site/path/one/
(注意尾部斜杠)
to=“two”
将带您到
site/path/one/two
。那么basename呢?这是非常不可预测的,因为您永远不知道用户是否会使用尾部斜杠
<Link to="two" />
history.push({ pathname: '..', search: 'foo=bar' });
<NavLink to={`${match.url}/three`} />