如何从本机反应将数据传递到本机iOS视图?

时间:2017-08-26 00:31:52

标签: objective-c react-native

我已经在线阅读了本地文档,但我仍然在努力理解。如何使用我在JS方面提取的一些数据来实例化本机视图?基本上我想在桥上传递一些 JSON ,将 JSON 转换为 NSDictionary ,然后用 NSDictionary实例化一个视图即可。我已经能够成功创建原生视图,但我正在努力解决如何将任何数据传递给它的问题。我需要查看RCT_EXPORT_VIEW_PROPERTY吗?还是RCT_EXPORT_CUSTOM_VIEW_PROPERTY

在JS方面,我已经准备好使用我的原生组件:

import { requireNativeComponent } from 'react-native';
module.exports = requireNativeComponent('MyNativeView', null);

然后,在我的app.js文件中,我只是导入视图:

import MyNativeView from './MyNativeView'; 

并像这样呈现:

render() {
return (
    <MyNativeView />
);
}

这一切都很有效。这座桥工作得很好,为了简​​洁,我把这些代码留了下来。我需要做的是将一些数据传递给MyNativeView&#39;。像

这样的东西
`<MyNativeView data={this.JSONData} />`

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我知道这已经有一段时间了,但我相信这是未来互联网潜伏者的答案。

一旦你在 Javascript 中声明了“数据”属性,你需要在 Objective-C / Swift 领域做两件事。

第一件事是在您导出原生 iOS 视图的 .m 类中,您需要这样的东西:

RCT_EXPORT_VIEW_PROPERTY(data, NSDictionary *)

然后,这将在您在视图管理器类中返回的任何视图上自动调用“setYourCustomerPropertyName”的 setter 函数。但是,如果您不使用此 setter 函数创建本机 iOS 视图,并且您在 javascript land 中传递一个 prop,您将得到经典的“未知实例发送到选择器崩溃”。

为了避免这种情况并真正访问您的数据,您所要做的就是在视图中设置该 setter,然后您就可以无故障地访问该数据。

在 Swift 中

class MyCustomView: UIView {
   func setData(data: Dictionary<String,Any>) {
     // Access your data here 
   }
}

在 Objective-C 中

#import "MyCustomView.h"

@implementation MyCustomView

-(void)setData:(NSDictionary *)data {
  // set data here
}

@end

然后一起

@interface MyNativeViewManager()

@end

@implementation MyNativeViewManager

RCT_EXPORT_MODULE(MyNativeView)
RCT_EXPORT_VIEW_PROPERTY(data, NSDictionary *)

- (UIView *)view {
  return [MyCustomView new];
}