我在这个网址上:
/path1/path2
然后:
<Link to="path2/path3" />
使用此代码,地址栏中的地址更改为:
/path1/path2/path3
它似乎奏效了:它已经走到了最后,/
并为此添加了新路径。但是,实际上,虽然它更改了地址栏中的 url,但不会发生导航。
看起来链接必须给出绝对网址?
我在这个网址上:
/path1/path2
然后:
<Link to="path2/path3" />
使用此代码,地址栏中的地址更改为:
/path1/path2/path3
它似乎奏效了:它已经走到了最后,/
并为此添加了新路径。但是,实际上,虽然它更改了地址栏中的 url,但不会发生导航。
看起来链接必须给出绝对网址?
在 react-router v4 中支持相对路径。该history
库“就像浏览器一样”解析相对路径,以便
<Link to="two" />
或
history.push({ pathname: '..', search: 'foo=bar' });
在 urlsite.com/path/one
将重定向到site.com/path/two
和site.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-router
2.x 及更高版本。
是的。使用react-router-relative-links库。它是由 react-router 的原作者之一 Ryan Florence 编写的。
要使用您的示例,您需要使用:
{ RelativeLink } = require 'react-router-relative-links'
...
<RelativeLink to="./path3">My link text</RelativeLink>