|
iOS端:
// 定义暴露的方法,以Promise的形式返回结果
RCT_EXPORT_METHOD(getCurrentConnectivity:(RCTPromiseResolveBlock)resolve
reject:(__unused RCTPromiseRejectBlock)reject)
{
resolve(@{@"network_info": _status ?: RCTReachabilityStateUnknown});
}
// 发送网络状态变更事件
[self sendEventWithName:@"networkStatusDidChange" body:@{@"network_info": status}];
*数据类型:
- iOS下因为有id类型,所以限制不大,跟JS对象一致
- Android下需要手动读取对象值
- Null
- Boolean
- Number
- String
- Map
- Array
NativeUI组件
UI组件要复杂一些,需要定义ViewManager和具体View的实现,ViewManager用来创建/管理View实例,是View实例和React之间沟通的桥梁。
Android端ViewManager可继承自SimpleViewManager、ViewGroupManager
以图片组件Image为例:
组件的JS端代码:
// 引用Native组件
const RCTImageView = requireNativeComponent('RCTImageView', Image);
// 组件代码
<RCTImageView
{...this.props}
style={style}
resizeMode={resizeMode}
tintColor={tintColor}
source={sources}
/>
定义组件名称:
ViewManager:
Android端:
// 定义组件名称
public static final String REACT_CLASS = "RCTImageView";
@Override
public String getName() {
return REACT_CLASS;
}
// 创建组件实例
@Override
public ReactImageView createViewInstance(ThemedReactContext context) {
return new ReactImageView(
context,
getDraweeControllerBuilder(),
getCallerContext());
}
iOS端:
RCT_EXPORT_MODULE()
// RCT_EXPORT_MODULE的宏定义
#define RCT_EXPORT_MODULE(js_name)
RCT_EXTERN void RCTRegisterModule(Class);
+ (NSString *)moduleName { return @#js_name; }
+ (void)load { RCTRegisterModule(self); }
// Implemented by RCT_EXPORT_MODULE
+ (NSString *)moduleName;
- (UIView *)view
{
return [[RCTImageView alloc] initWithBridge:self.bridge];
}
定义组件属性:
JS端传递属性的形式是:
<RCTImageView
{...this.props}
// 属性
style={style}
resizeMode={resizeMode}
tintColor={tintColor}
source={sources}
/>
Android端:
@ReactProp(name = "src")
public void setSource(ReactImageView view, @Nullable ReadableArray sources) {
view.setSource(sources);
}
iOS端:
RCT_EXPORT_VIEW_PROPERTY(blurRadius, CGFloat)
RCT_REMAP_VIEW_PROPERTY(defaultSource, defaultImage, UIImage)
RCT_CUSTOM_VIEW_PROPERTY(tintColor, UIColor, RCTImageView)
{
view.tintColor = [RCTConvert UIColor:json] ?: defaultView.tintColor;
view.renderingMode = json ? UIImageRenderingModeAlwaysTemplate : defaultView.renderingMode;
}
定义组件方法:
(编辑:网站开发网_安阳站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|