将字符串从 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 传回参数

React:将状态从孩子传递到孩子再传递给父母

将 ID 从 React 传递给 Apollo 以找到正确的结果?

防止 Obj-C 代码将 `nil` 传递给具有非可选参数的 Swift 方法