react-router 是否支持相对链接?

IT技术 url reactjs
2021-05-08 02:47:06

我在这个网址上:

/path1/path2

然后:

<Link to="path2/path3" />

使用此代码,地址栏中的地址更改为:

/path1/path2/path3

它似乎奏效了:它已经走到了最后,/为此添加了新路径。但是,实际上,虽然它更改了地址栏中的 url,但不会发生导航。

看起来链接必须给出绝对网址?

4个回答

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

<Link to="two" />

history.push({ pathname: '..', search: 'foo=bar' });

在 urlsite.com/path/one将重定向到site.com/path/twosite.com/three?foo=bar

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

或者,这就是我所做的,您可以match从您的父 Route(或从 context router.route.match获取一个对象,并使用它to在 NavLink 中构建您的亲戚

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

这样你的组件就可以独立于它的父路由工作。

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

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

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

a 的to属性Link必须是一个位置描述符,它可以是一个字符串(其中明确指出

不支持相对路径

) 或具有pathname绝对属性的对象(根据其定义)。

有一个open issue 讨论相对链接,这似乎表明将来可能会支持相对路径。

这里所说的一切都适用于react-router2.x 及更高版本。

是的。使用react-router-relative-links库。它是由 react-router 的原作者之一 Ryan Florence 编写的。

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

{ RelativeLink } = require 'react-router-relative-links'
...
<RelativeLink to="./path3">My link text</RelativeLink>