次のようなルート構成があります (関連すると思われる部分のみを示しています)。
var React = require('react');
var Router = require('react-router');
var { Route, DefaultRoute, NotFoundRoute } = Router;
var routes = (
<Route handler={AppHandler}>
<DefaultRoute handler={HomeHandler}/>
<Route name='home' path='/home' handler={HomeHandler}/>
<Route name='settings' path='/settings/?:tab?' handler={SettingsHandler}/>
<NotFoundRoute handler={NotFoundHandler}/>
</Route>
);
Router.run(routes, Router.HistoryLocation, function (Handler) {
React.render(<Handler/>, document.getElementById('application'));
});
さて、設定の反応ファイルには、次のものがあります。
var Settings = React.createClass({
mixins: [Router.State],
render: function() { ... }
});
にアクセスしhost.local/settings
てログに記録this.getParams()
すると、すべてが正常に機能し、ファイルがレンダリングObject {tab: undefined}
されてコンソールに表示されます。しかし、試してみるとすぐにhost.local/settings/user
-コンソールが次のようなものを返すと予想していたところObject {tab: 'user'}
-、全体がどこかでクラッシュし、コンソールに投げ込み始めUncaught SyntaxError: Unexpected token <
ます。
React はまだ開発が進んでいないため、多くの場合、エラーはかなりあいまいです。
Path Matching Guideで提供されている仕様に従っていますが、かなり標準的なように見えるので、react-router 自体に問題があるとしか思えませんか、それとも何か不足していますか?
アップデート
tl;dr: react-router の問題ではありません。
長いバージョン:
どうやら、問題は ReactJS にも React-Router 自体にもないことがわかりました。ほとんどの場合、gulp-webserver (並行して実行されている個別のプロジェクトを接続するためにプロキシを使用して開発するために使用しています) のバグが関係しており、URL がリンク経由ではなくブラウザーに直接入力されるとエラーがトリガーされます。
私はテストを行い、ナビゲート時には正常に動作しますが、この github issueで説明されているように直接アクセスするとクラッシュします。これにより、基本的に機能的なディープリンク テストが実行できなくなりますが、本番環境では動作するはずです。
更新 2
tl;dr: gulp-webserver でも問題ありません。
私の場合、パスに関連してrelative
おり、前述の gulp-webserver の問題ではありません。具体的に言うと、スクリプトと CSS の参照が絶対的であることを確認して、URL に入力しているパスでそれらを見つけようとしないようにする必要がありました。absolute
例えば:
と の 2 つの URL が/settings
あります/settings/account
。その場合、フォールバック ファイルにスクリプトを含めると、 にファイルがない<script src="scripts/main.js"></script>
ため、サーバーは 404 を返します/settings/scripts/main.js
。
私はばかげていますが、他の誰かがそれに陥った場合に備えて、これが役立つことを願っています.