2016-09-30 1 views
0

У меня есть следующий сценарий, где мне нужно запустить некоторый «код» при первом входе в страницу или , возвращаясь к нему с другой страницы.прослушиватель событий в приложении showhow на компоненте React не работает должным образом

Функция кеширования Safari (https://webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/) вызывает это, поскольку это кеширование моей страницы и ничего не выполняющее.

Я последовал их рекомендации по добавлению прослушивателя событий к событию «pageshow», таким образом, я могу проверить, сохраняется ли это событие, а затем запустить то, что мне нужно.

Это example в основном то, что я хотел бы иметь:

  • первый доступ к странице ... прикрепить слушателя = Круто, у меня есть что.
  • если я выйду из страницы и вернусь (используя Safari), он запустит моего слушателя на страницахhowhow = Cool, у меня это ... почти.
  • слушатель должен быть запущен каждый раз, когда я возвращаюсь на эту страницу = Не круто, мой слушатель один раз срабатывает.

Я использую среагировать и componentDidMount() где я готовлюсь все:

enter image description here

Он работает в первый раз .. Я могу перемещаться из мою страницу и вернуться к ней + выполнение того, что мне нужно.

Проблема заключается в следующем: повторение «перехода от моей страницы и возврата» во второй раз ничего не сделает .. похоже, что слушатель удаляется или что-то в этом роде.

Спасибо за внимание.

+0

Разве hte componentDidMount уже делает это для вас? Если бы это был я, я бы забыл о eventListener и просто обработать компонент реакции в своем компонентеDidMount. Это будет работать, если компонент монтируется каждый раз, когда вы перемещаетесь и возвращаетесь. Отображается ли компонент componentDidMount console.log каждый раз, когда вы уходите и возвращаетесь? – finalfreq

+0

из-за кеширования Safari, любой код внутри событий жизненного цикла моего компонента (например, componentDidMount и т. Д.) Не будет выполняться. Вот почему мне пришлось прикрепить слушателя событий. –

+0

В настоящее время я заставляю перезагружать страницу, если event.persisted - это правда .. что все выполняется (как и все другие браузеры). Но я бы хотел, чтобы поведение Safari не перегружало всю страницу, поэтому я добавил слушателя событий. –

ответ

1

Спустя два дня, пытаясь найти способ ... мой коллега попросил меня попробовать a listener on 'popstate'. Я так старался заставить слушателя «pagehow» работать, что я полностью забыл проверить его; он работал безупречно:

window.addEventListener('popstate', function(event) {