我有一个对象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端查看的最佳方法是什么?
答案 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
的属性。但是您可以发送在Swift
或calculateAge()
的自建模块中声明的本机功能/方法。
我建议您在本机模块中导出函数employee
。此函数接收JSON对象object (NSDictionary)
作为参数,并使用回调或发出事件返回该员工的期望年龄。
尽管我会为此使用 Promises 的构造。当您要在JS端调用此函数时,也可以调用此函数。但是,在本机模块上编写这种函数毫无意义,因为您可以在JS端执行相同的逻辑。
如果逻辑需要仅在本机端运行的额外数据,则在本机模块中导出功能将很有用。
最后,请确保您导出的employeeList
具有字符串{strong> keys 和 values 的任何类型,它们来自this list。因此,您需要将对象undefined
转换为JSON对象并从其中删除嵌套函数,以避免兼容性问题。