我不認爲你錯過了什麼。此功能僅僅是開箱即用的原生反應。也許這個想法是爲了簡化,因爲對於大多數應用程序來說,當應用程序返回到前臺時足以執行數據同步。
您可以創建自己的本機模塊,它提供了這個功能,或者你可以用一個簡單的(有點哈克的?)解決方案去:
在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