Реагировать маршрутизатором и произвольными парами запросов: страница непреднамеренно обновляется при загрузке?
Я с большим успехом использовал React Router в последние несколько недель, но я только что столкнулся с проблемой, для которой я, кажется, не могу найти решение. Всякий раз, когда к url-адресу добавляется произвольный параметр запроса (в нашем случае для отслеживания URL-адресов из электронной почты), страница, на которую вы попадаете, загружается, а затем автоматически обновляется без предупреждения.
Учитывая самые основные настройки маршрута:
var routes = (
<Route handler={ResultsController}>
<DefaultRoute handler={Results} />
</Route>
);
И обработчик по умолчанию:
Router.run(routes, function (Handler, state) {
React.render(<Handler params={state.params} />, domElement);
});
Если я перейду к http://whatever.com/results
, все будет работать так, как он должен, но если я перейду на http://whatever.com/results?ref=track
, страница обновится и перенаправится обратно на http://whatever.com/results#/
. Обратите внимание, что добавление queryParams после хэша и Слэша приводит к правильному поведению; проблема в том, что многие из этих ссылок генерируются на стороне сервера и принудительное использование хэшей таким образом нежелательно.
Нужно ли настраивать обработчик подстановочных знаков для queryParams? Любые указания на документацию также были бы полезны.
Правка:
Хотя это не касается всеобъемлющего вопрос / ошибка, приводящая к непреднамеренному обновлению, я обнаружил, что загрузка маршрута с помощью маршрутизатора.Опция Historylocation PushState позволяет предварительно отрисовывать queryParams:
Router.run(routes, Router.HistoryLocation, function (Handler, state) {
React.render(<Handler params={state.params} query={state.query} />, domElement);
});
Спасибо!
1 ответ:
Проблема здесь в том, что вы используете
Router.HashLocation
, расположение по умолчанию, если вы его не задаете.
Router.run(routes, Router.HistoryLocation, function(...
Исправит проблему, но вам понадобится сервер, который сможет справиться с ней.
Если вы все еще хотите хэшировать местоположение, поместите свой запрос после
#
. Что касаетсяHashLocation
, запрос перед#
не является частью местоположения, которое он понимает.