将iOS对象传递给React Native

时间:2018-12-13 22:48:23

标签: ios objective-c react-native react-native-native-module

我有一个对象employeeList,其中包含对象employee,然后每个员工对象都有一个person对象,并且其中一个address对象,并且person and address都包含NSString属性以及一些函数,例如calculateAge()

我想将此employeeList对象从本机端传递到react本机端,但它以null出现,这是因为RN桥将仅发送私有数据类型。

https://facebook.github.io/react-native/docs/native-modules-ios#argument-types

将employeeList转换为JSON对象或嵌套映射以便可以在RN端查看的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我不太擅长为Native Componets创建Objective-C方法。但是从docs我们可以看到:

  

桥接方法的返回类型始终为空。反应本机桥   是异步的,因此将结果传递给JavaScript的唯一方法是   使用回调或发出事件(请参见下文)。

因此,我认为最简单的选择是使用回调函数将数据发送到JS端。

所以类似的内容应该在您的.m文件中。

RCT_EXPORT_METHOD(getEmployeeList:(RCTResponseSenderBlock)callback)
{
  NSArray *employeeList = ... (*)
  callback(@[[NSNull null], employeeList]);
}

(*)employeeList,我想这将是一个字典数组。循环映射数据,以便在将所有员工添加到employeeList之前对其进行迭代。因为我不知道您的数据结构,所以我认为这是您应该能够想到的。计算年龄函数,您可能必须在JS端实现,因为我认为您不能将函数作为字典的一部分传递。

然后,您可以在JS端使用类似的方法来捕获数据。

NativeModules.EmployeeModule.getEmployeeList((error, employees) => {
  if(error) {
    console.error(error);
  } else {
    this.setState({employees});
  }
});

答案 1 :(得分:0)

不能通过网桥objects发送具有嵌套功能的object作为同一Objective-C的属性。但是您可以发送在SwiftcalculateAge()的自建模块中声明的本机功能/方法

我建议您在本机模块中导出函数employee。此函数接收JSON对象object (NSDictionary)作为参数,并使用回调或发出事件返回该员工的期望年龄。 尽管我会为此使用 Promises 的构造。当您要在JS端调用此函数时,也可以调用此函数。但是,在本机模块上编写这种函数毫无意义,因为您可以在JS端执行相同的逻辑。

如果逻辑需要仅在本机端运行的额外数据,则在本机模块中导出功能将很有用。

最后,请确保您导出的employeeList具有字符串{strong> keys 和 values 的任何类型,它们来自this list。因此,您需要将对象undefined转换为JSON对象并从其中删除嵌套函数,以避免兼容性问题。