У меня есть приложение 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 обрабатывает перезагрузку этого приложения, но если у вас есть решение для этой конкретной проблемы, пожалуйста, поделитесь!