React Native: активное состояние в слушателе AppState вызывается при монтировании компонента - PullRequest
0 голосов
/ 26 апреля 2020

Я настроил прослушиватель для AppState в React Native, чтобы знать, когда мое приложение переключается с фона на передний план, чтобы я мог показывать экран spla sh.

useEffect(() => {
AppState.addEventListener('change', handleAppStateChange);
},[])

const handleAppStateChange = newState => {

    if (newState === 'active') {
      RNBootSplash.show();
    }

  };

Проблема заключается в том, и это происходит только тогда, когда я компилирую релиз APK, по какой-то причине он отлично работает в отладке, экран spla sh отображается каждый раз, когда компонент монтируется, в то время как он должен запускаться только тогда, когда приложение переключается в активное состояние из фона. Любая помощь?

Использование React Native 61,5

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Единственное, что сработало, это использование ссылок

const latestAppState = React.useRef(AppState.currentState)

const handleAppStateChange = newState => {

    if (latestAppState.current.match(/inactive|background/) && newState === 'active') {
      RNBootSplash.show();

    }
    latestAppState.current = newState
  }
0 голосов
/ 26 апреля 2020

Попробуйте так:

const [appState, setAppState] = React.useState(AppState.currentState)

useEffect(() => {
    AppState.addEventListener('change', handleAppStateChange)

    setAppState(AppState.currentState)

    return AppState.removeEventListener('change')
},[])

const handleAppStateChange = newState => {
    if (appState.match(/inactive|background/) && newState === 'active') {
      console.log('App has come to the foreground!')
      // Show the splash screen
      RNBootSplash.show()
    } else {
      console.log('App has gone to the background!')
      // do something in background
    }

    setAppState(newState)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...