反応ルーターの奇妙な動作に気付きました。私は自分のルートを次のように定義しています:
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
目的の効果を得るためにミックスインを使用しようとしていますtransitionTo()
が、これを処理する「正しい」方法を誰かが知っているかどうかまだ疑問に思っています. また、私が見ているのは実際に意図した反応ルーターの動作なのだろうかと思います。何かが欠けている場合は、啓発されたいと思います。乾杯!
アップデート
反応ルーターのタウローズから:
やってみました
<Redirect from="*" to=".." />
https://github.com/rackt/react-router/issues/732に応答する場合。
同様の質問で他の人を助けるかもしれないのは、各サブルートにも Redirect を提供する必要があることに注意することです.
どうやら、このセットアップは、より詳細なルート制御と 404 などの処理を可能にするように設計されているようです。
from="*"
最初はそうかなと思っていたのですが、スプラット( )の仕組みがわかりませんでした。多分これは他の人に役立つでしょう。乾杯。