У меня есть конфигурация маршрута, которая выглядит так (показывая только те части, которые, по моему мнению, могут быть релевантными):
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
и log this.getParams()
, все работает отлично, и файл отображает мне Object {tab: undefined}
в консоли. Но как только я попробую host.local/settings/user
- где я ожидал, что консоль вернет что-то вроде Object {tab: 'user'}
-, все это сработает где-то и просто начинает бросать Uncaught SyntaxError: Unexpected token <
в консоль.
Реакция еще молода, поэтому ошибки во многих ситуациях довольно расплывчаты.
Я следил за спецификациями, приведенными в Руководстве по сопоставлению путей, и это кажется довольно стандартным, поэтому я может только предположить, что это проблема с самим реагирующим маршрутизатором или я что-то упускаю?
Update
tl; dr: Это не проблема с реактивным маршрутизатором.
Длинная версия:
По-видимому, выясняется, что проблема не в том, что ReactJS не является самим React-Router. Это связано главным образом с ошибкой gulp -webserver (которую я использую для разработки с использованием прокси для подключения отдельных проектов, работающих параллельно) и вызывает ошибку при вводе URL-адресов непосредственно в браузере вместо доступ через ссылку.
Я сделал тест, и он отлично работает при навигации, но сбой при обращении напрямую, как описано в этот вопрос github, что в основном делает мои функциональные тесты deeplink нежизнеспособными, но они должны работать, когда они производятся.
Обновление 2
tl; dr: Это не проблема с gulp -webserver.
В моем случае это было связано с relative
и absolute
paths и не проблема с gulp -webserver, как упоминалось ранее. Чтобы быть более конкретным, я должен был убедиться, что ваши ссылки script и CSS являются абсолютными, так что они не пытаются найти их в пути, который вы вводите в URL.
например:.
У вас есть два URL: /settings
и /settings/account
. В этом случае, если вы включили script в резервном файле, что-то вроде <script src="scripts/main.js"></script>
, сервер вернет ему 404, так как в /settings/scripts/main.js
нет файла.
Неважно, но на всякий случай, если кто-то еще этого хочет, я надеюсь, что это поможет.