Как жизненный цикл приложения работает в React-Native? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть приложение React-Native с реагированием-навигацией. Мы решили использовать один верхний уровень навигатор и использовать действия для навигации.

Это все работает как шарм, кроме случаев, когда приложение переходит на задний план и обратно на передний план. Если ОС не закрывала приложение (когда вы слишком долго держите его в фоновом режиме или выполняете другие операции с интенсивным использованием памяти), все в порядке, но когда ОС решила убить его, приложение перезагружается при открытии. Вот где происходят странные вещи: большая часть кода выполняется повторно (например, снова выполняется app.js), но большая часть кода не выполняется (например, статические js-классы).

Итак, мой вопрос: как React-Native определяет, что перезапускается, а что нет, это просто App.js и компоненты? А что происходит с средами промежуточного программного обеспечения, такими как redux, redux-saga и т. Д ...?

Чтобы привести конкретный пример:

App.js:

Navigator = createStackNavigator(routes, {headerMode: 'screen', initialRouteName: 'Launch'});

class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <View style={{flex: 1}}>
          <Navigator ref={navigatorRef => {NavigationService.setNavigator(navigatorRef)}}/>
        </View>
     </Provider>
   )
  }
}

NavigationService.js (статический класс, все функции вызываются из саг через действия:

let _navigator;

function setNavigator(navigatorRef) {
  _navigator = navigatorRef;
}

//All navigate functions

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

Хотелось бы узнать больше о том, как React-Native обрабатывает перезагрузку этого приложения, но если у вас есть решение для этой конкретной проблемы, пожалуйста, поделитесь!

1 Ответ

0 голосов
/ 06 июня 2019

Вы можете добавить функцию жизненного цикла, такую ​​как componentDidMount, в вашем app.js. Я не знаю, какой js-classs не выполняется повторно. Можете ли вы показать пример кода?

...