React Native: AppState.addEventListener регистрирует повторяющиеся события при возобновлении при нажатии на уведомление - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть код, который я хочу запустить, когда мое приложение возобновит работу из фона.С этой целью я регистрирую событие, используя AppState.addEventListener ().

  const handleAppStateChange = () => {
    console.log('Do stuff')
  }

  constructor(props: Props) {
    super(props)
    AppState.addEventListener('change', this.handleAppStateChange)
  }

  componentWillUnmount() {
    AppState.removeEventListener('change', this.handleAppStateChange)
  }

Когда я обычно выхожу из приложения и возобновляю его работу, оно, однако, печатает «делать вещи», как и ожидалось (и здесь возникает проблема), когда приложение свернуто, и я нажимаю на уведомление, приложение напечатает «Делать вещи» дважды.

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

Итак, кто-нибудь знает, почему он это делает, когда нажимает на уведомление, и могу ли я предотвратить его (используя плагин реагировать-на-push-уведомления), или, альтернативно, если есть способ, которым я могу гарантировать, что повторяющиеся события не регистрируются?

Это происходит на моем физическом устройстве Android, но я не уверен, что это проблема с iOS, но просто подумал, что я проверю, знает ли кто-нибудь, возможно ли это)

1 Ответ

0 голосов
/ 01 февраля 2019

Так что после долгих мучений мне удалось найти решение.Это не очень хорошо, но на данный момент работа выполнена.

if (AppState._eventHandlers.change.size === 0) {
  AppState.addEventListener('change', this.handleAppStateChange)
}

Я чувствую, что страница AppState https://facebook.github.io/react-native/docs/appstate, крайне неадекватна, и поэтому единственный вариант, который я сейчас вижу, этоприватный метод.Постараюсь проконсультироваться с командой, если это можно улучшить, потому что в некоторых случаях вам не нужно регистрировать повторяющиеся события.

...