我不认为你错过了什么。此功能仅仅是开箱即用的原生反应。也许这个想法是为了简化,因为对于大多数应用程序来说,当应用程序返回到前台时足以执行数据同步。
您可以创建自己的本机模块,它提供了这个功能,或者你可以用一个简单的(有点哈克的?)解决方案去:
在AppDelegate中保存的反应根视图的引用:
@interface AppDelegate()
@property (nonatomic, strong) RCTRootView *rootView;
@end
当初始化视图,设置你的财产,并使用它:
self.rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"MyApp"
initialProperties:nil
launchOptions:launchOptions];
现在实施处理像您激活状态W上的AppDelegate的方法在您的iOS应用乌尔德做和信息传递的道具:
-(void)onAppActiveStateChanged:(BOOL)appBecameActive
{
NSMutableDictionary *newProps = [NSMutableDictionary dictionary];
if (self.rootView.appProperties != nil) {
[newProps addEntriesFromDictionary:self.rootView.appProperties];
}
newProps[@"appDidBecomeActive"] = @(appBecameActive);
self.rootView.appProperties = newProps;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
[self onAppActiveStateChanged:NO];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[self onAppActiveStateChanged:YES];
}
在JavaScript端,做任何你需要的时候道具变化:
componentWillReceiveProps(nextProps) {
if (nextProps.appDidBecomeActive) {
alert('app did become active');
}
}
我不知道这是否是最好的办法,但它应该工作...
我目前正在使用react-native 0.26.3和'AppState'按iOS和Android的预期工作,所以似乎不再需要'AppStateIOS'。 –
是的。看起来这是在最近版本的React Native中修复的。 – Mitch
我用过appstate。它适用于模拟器,但使用真实的ios设备时事件不会被解雇。 – Waqas