我注意到 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="*"
) 是如何工作的。也许这对其他人有用。干杯。