我有一个带有react-navigation的React-Native应用程序。我们决定使用一个顶级navigator并使用操作进行导航。
这一切都像超级按钮一样工作,除非应用程序进入后台并返回到前台。如果操作系统没有终止应用程序(当您将其在后台放置太长时间或执行其他占用大量内存的操作时),一切正常,但是当操作系统决定终止该应用程序时,该应用程序将在打开时重新加载。这就是发生奇怪的事情的地方:许多代码正在重新执行(例如,再次重新执行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(静态类,所有函数都是通过saga的动作调用的:
let _navigator;
function setNavigator(navigatorRef) {
_navigator = navigatorRef;
}
//All navigate functions
上面的代码在重新启动之前就像一个超级按钮一样工作,然后在此处附加了一个新的导航器,但是旧的导航器仍然存在并且会产生大量错误。我试图不替换导航器,以防止出现错误,但是无论如何,通过App.render(),新的导航器就在那里了,并且您停留在初始屏幕上。
我想了解React-Native处理此应用程序重新加载方式的更多信息,但是如果您有针对此特定问题的解决方案,请分享!
答案 0 :(得分:0)
您可以在app.js中添加诸如componentDidMount之类的生命周期函数,我不知道哪个js类没有重新执行,您可以显示一些示例代码吗?