如何检测何时打开React Native应用程序?

Mit*_*tch 24 react-native

我的React Native应用程序希望在用户打开应用程序时将其本地数据与API同步.这应该在用户返回应用程序时发生,而不仅仅是在第一次启动时.基本上,我想要的是相当于AppDelegate的applicationDidBecomeActive回调,以便我可以在那里运行同步代码.显然,我想在React Native中这样做.

据我所知,root组件上的componentWillMount/ componentDidMount回调仅在最初加载应用程序时运行,而不是在用户离开应用程序并稍后返回(未明确退出应用程序)之后运行.

我认为AppStateAPI将提供此功能,但它的change侦听器也不会在这种情况下触发.

这似乎是明显的功能,所以我必须错过一些明显的东西.救命!

Mit*_*tch 24

我通过使用AppStateIOSAPI而不是使用API 修复此问题AppState.后者在iOS设备上按预期工作:当应用程序进入后台时,"change"事件将触发,并且当它返回到前台时再次触发.该AppStateAPI似乎不火"change"的iOS设备上的所有事件,如作出反应本地v0.18,据我可以告诉的.项目的约定表明AppState应该是一个跨平台的包装器AppStateIOS,但这似乎不是这种情况.

以下示例应演示此问题:

React.createClass({

  componentDidMount() {
    AppStateIOS.addEventListener('change', state =>
      console.log('AppStateIOS changed to', state)
    )

    AppState.addEventListener('change', state =>
      console.log('AppState changed to', state)
    )
  },

  render() {
    return <View/>
  }

})
Run Code Online (Sandbox Code Playgroud)

当此组件安装到React Native应用程序中时,您将在关闭并打开应用程序时看到"AppStateIOS已更改为...".据我所知,你永远不会看到"AppState改为......".

更新

似乎最近在React Native中修复了这个问题(截至第26条).您现在可以AppState在iOS和Android上使用广告.