将字符串从 Obj-C 传递到 React Native
Posted
技术标签:
【中文标题】将字符串从 Obj-C 传递到 React Native【英文标题】:Passing a string from Obj-C to React Native 【发布时间】:2016-05-05 09:52:01 【问题描述】:我目前正在使用 React Native 构建一个应用程序,并遇到了一个我似乎无法在我的 RN 框架中解决的问题,我可能需要提到我对 Objective-C 非常陌生。但是,我设法通过在我的 AppDelegate.m 文件中调用它来获得它。但是如何将我在 appdelegate 中创建的这个字符串变量传递给我的 javascript 文件呢?
我快速浏览了 NativeAppEventEmitter,但它似乎有所不同。在我的 AppDelegate.m 中,它看起来像这样:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation
];
NSString *fbAccessToken = [FBSDKAccessToken currentAccessToken].tokenString;
return handled;
查看 RN 给出的 NativeAppEventEmitter 技巧,我尝试实现它。但它对我的桥有很多抱怨。
#import "AppDelegate.h"
#import "RCTRootView.h"
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import "RCTBridge.h"
#import "RCTBridgeModule.h"
#import "RCTEventDispatcher.h"
@implementation AppDelegate
RCT_EXPORT_MODULE();
@synthesize bridge = _bridge;
我在AppDelegate.h
中将其声明为:@property (nonatomic) NSString *bridge;
但是当我尝试使用eventDispatcher
时,它给了我以下信息:
【问题讨论】:
【参考方案1】:您可以在使用initialProperties
启动应用程序时传递一些数据。我认为这是您情况的最佳解决方案。您可以在RCTRootView
上传递您的令牌,然后从props
获取它。 RN docs 中有一个很好的例子。
或者,您可以 send an event 嵌入数据。
【讨论】:
只有当我在我的应用程序中执行登录时才会出现数据。所以我猜当应用程序启动时它会是空的。这会是个问题吗? 我已更新我的答案以适合您的情况。这可能与问题本身无关,但您可以使用react-native-fbsdk
并避免在这种情况下进行原生 JS 通信。您可以找到有关如何正确配置它的教程here。
谢谢!那时我会努力做到这一点。关于 fbsdk,我这样做的原因是因为我能够在这里完美地生成一个访问令牌,但不能使用 fbsdk,这个问题在我的问题中进一步解释:***.com/questions/37045983/…
用新问题编辑了我的问题。出于某种原因,桥需要一个属性声明,其他用途似乎不需要这个,但是这个需要。而且我尝试过的每一个声明都是错误的。
它应该被声明为:@property (nonatomic, strong) RCTBridge *bridge;以上是关于将字符串从 Obj-C 传递到 React Native的主要内容,如果未能解决你的问题,请参考以下文章
React.js - 如何使用 axios POST 方法将数据从 div 传递到函数?
如何在 react-native 中将函数的结果从一个组件传递到另一个组件?
Obj-C:从导航控制器中的 detailViewController 传回参数