Динамические сегменты реагируют на маршрутизатор
У меня есть конфигурация маршрута, которая выглядит следующим образом (показаны только те части, которые, я думаю, могут иметь значение):
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 <
в консоли.
Реакт еще молод, и поэтому ошибки довольно расплывчаты во многих ситуациях.
Я следовал спецификациям, предоставленным наПутеводитель по путям и это кажется довольно стандартным, так что я могу только предположить, что это проблема самого реактивного маршрутизатора или я что-то упустил?
Обновитьtl; dr: Это не проблема с реагирующим маршрутизатором.
Длинная версия:
Судя по всему, проблема не в ReactJS и не в самих React-Router. В основном это ошибкаГлоток-веб-сервер (который я использую для разработки с использованием прокси-серверов для соединения отдельных проектов, работающих параллельно) и вызывает ошибку, когда URL-адреса вводятся непосредственно в браузере, а не через ссылку.
Я сделал тест, и он хорошо работает при навигации, но вылетает при прямом доступе, как описано наэтот вопрос GitHub, что в основном делает мои функциональные тесты DeepLinual нежизнеспособными, но должно работать во время работы.
Обновление 2tl; dr: Это не проблема с gulp-webserver.
В моем случае это было связано сrelative
а такжеabsolute
пути ине проблема с gulp-webserver как уже упоминалось ранее. Чтобы быть более точным, я должен был убедиться, что ваш скрипт и ссылки CSS были абсолютными, чтобы он не пытался найти их по пути, который вы вводите в URL.
например.:
У вас есть два URL:/settings
а также/settings/account
, В этом случае, если у вас есть сценарий включения в резервный файл, что-то вроде<script src="scripts/main.js"></script>
сервер вернет за него 404, поскольку в/settings/scripts/main.js
.
Глупо с моей стороны, но в случае, если кто-то еще влюбится в это, я надеюсь, что это поможет.