react-router и redux-simple-router теряют состояние при обновлении мобильного Chrome

Что-то связанное с этим вопросом, который я задал, я обнаружил довольно неприятную ошибку /детали реализации в мобильном Chrome при взаимодействии с API истории через redux-simple-router & реагировать на маршрутизатор.

Мой сценарий прост; мое приложение имеет несколько URL-адресов (сделанных с использованием объекта истории браузера). Для примера предположим, что это / /product и /contact. Только на маршруте / и маршруте / у меня есть форма регистрации и в компоненте заголовка (я также использую React) кнопка регистрации, которая напрямую связана с этой панелью регистрации.

Как я реализовал это в моем компоненте приложения верхнего уровня, который у меня есть:

  browserHistory.listen(location => {
  if (typeof location.state === 'undefined' || location.state === null) {
    window.scrollTo(0, 0);
  }
});

который при каждом изменении страницы будет прокручиваться вверх страницы. Однако, если есть смена страницы и состояние местоположения не равно нулю, например signup, при прокрутке ничего не произойдет. Затем на странице, которая обрабатывает рендеринг для моего маршрута /, я проверяю состояние, чтобы увидеть, равно ли оно signup, и если да, я прокручиваю до компонента формы регистрации.

Навигация достигается с помощью создателей действий из redux-simple-router:

dispatch(routeActions.push({ pathname: '/', state: 'signup' }));

В каждом мобильном браузере это действие работает отлично. Однако в мобильном Chrome каждое действие маршрута, независимо от того, запускаю ли я его с помощью создателя действия или компонента Link из реагирующего маршрутизатора, запускает обновление страницы во время навигации, и приложение теряет состояние. Поэтому, если я нажимаю кнопку регистрации, срабатывает изменение страницы, а затем состояние теряется, поэтому, когда страница проверяет this.props.location.state, она сбрасывается на ноль.

Теперь я всесторонне протестировал это, у меня нет проблем с настольным Chrome, Firefox или Safari, и то же самое с Firefox, Opera и Safari на iOS. Каждое действие routeActions.push запускает смену страницы и сохраняет состояние.

Кто-нибудь знает, что здесь происходит? Я часами бился головой о стену, пытаясь понять, почему это не работает только в Chrome на iOS. Это просто деталь реализации API истории Chrome? И если да, то почему это не влияет на браузер Chrome на рабочем столе?


person barndog    schedule 20.01.2016    source источник
comment
это дикий удар в темноте ... но пробовали ли вы переименовать переменную во что-то другое, кроме location, учитывая, что местоположение является объектом на window в большинстве браузеров и, следовательно, доступно в глобальной области. Я знаю, что это не должно иметь значения, потому что переназначают имя в функциональной области. Это просто идея.   -  person eblahm    schedule 20.01.2016
comment
Обязательно попробую, спасибо @eblahm   -  person barndog    schedule 20.01.2016
comment
Нах ничего не сделал, хотя стоит попробовать   -  person barndog    schedule 20.01.2016
comment
разобрался: github.com/rackt/react-router/issues/2565   -  person barndog    schedule 20.01.2016