1

我注意到 react-router 中有一个奇怪的行为。我的路线定义如下:

var routes = (
  <Route name='app' path='/' handler={Master}>
    <DefaultRoute handler={HomePage} />
    {/* inject:route */}
    <Route name='home' handler={HomePage} />
    <Route name='issues' handler={IssuesPage} />
    <Route name='security' handler={SecurityPage} />
    <Route name='contactUs' handler={ContactUsPage} />
    <Route name='docs' handler={DocsPage} />
    {/* endinject */}
    <Redirect from='/' to='/home' />
    <NotFoundRoute handler={HomePage}/>
  </Route>
);

Router.run(routes, function (Handler) {
  React.render(<Handler />, document.body);
});

在我们的https://github.com/shovon/generator-react-material-ui的分支中。

单击 LeftNav 中的链接会产生预期的结果。启动 gulp 后,从 / 到 /home 的重定向有效。当我输入类似http://localhost:3000/#/some-undefined-route. 正如预期的那样,DefaultRoute 处理程序接管,并且主页内容可见。但是,奇怪的 URL 仍然存在。我期望任何未定义的路由重定向到预定义的包罗万象。例如,我想http://localhost:3000/#/some-undefined-route自动重定向到http://localhost:3000/#/home——而不仅仅是显示该内容。

我们正在尝试使用 mixintransitionTo()来达到预期的效果,但我仍然想知道是否有人知道处理这个问题的“正确”方法。我还想知道我所看到的是否实际上是预期的反应路由器行为。如果我错过了什么,我很想得到启发。干杯!

更新

来自 react-router 的 taurose:

你有没有尝试过

<Redirect from="*" to=".." />

回复https://github.com/rackt/react-router/issues/732时。

可能对其有类似问题的其他人有所帮助的是要注意,您还必须为每个 sub-route 提供一个 Redirect

显然,此设置旨在允许更详细的路线控制和处理 404 之类的事情。

最初,我们怀疑可能是这种情况,但我不明白 splat ( from="*") 是如何工作的。也许这对其他人有用。干杯。

4

0 回答 0