【发布时间】:2019-06-06 09:02:14
【问题描述】:
我有一个带有 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通过actions调用的:
let _navigator;
function setNavigator(navigatorRef) {
_navigator = navigatorRef;
}
//All navigate functions
上面的代码在重新启动之前就像一个魅力,然后一个新的导航器被附加到这里,但旧的导航器仍然存在并给出了大量的错误。我试图不更换导航器,这可以防止错误,但是通过 App.render() 新的导航器仍然存在,并且您被卡在初始屏幕上。
我想了解更多关于 React-Native 如何处理此应用重新加载的内部信息,但如果您对此特定问题有解决方案,请分享!
【问题讨论】:
标签: javascript android react-native react-navigation redux-saga