应用程序生命周期如何在React-Native中工作?

时间:2019-06-06 09:02:14

标签: javascript android react-native react-navigation redux-saga

我有一个带有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处理此应用程序重新加载方式的更多信息,但是如果您有针对此特定问题的解决方案,请分享!

1 个答案:

答案 0 :(得分:0)

您可以在app.js中添加诸如componentDidMount之类的生命周期函数,我不知道哪个js类没有重新执行,您可以显示一些示例代码吗?