Реагировать маршрутизатором и произвольными парами запросов: страница непреднамеренно обновляется при загрузке?


Я с большим успехом использовал 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 2

1 ответ:

Проблема здесь в том, что вы используете Router.HashLocation, расположение по умолчанию, если вы его не задаете.

Router.run(routes, Router.HistoryLocation, function(...

Исправит проблему, но вам понадобится сервер, который сможет справиться с ней.

Если вы все еще хотите хэшировать местоположение, поместите свой запрос после #. Что касается HashLocation, запрос перед # не является частью местоположения, которое он понимает.