我已经成功地为 float 和 BOOL 等原始类型创建了 RCT_EXPORT_VIEW_PROPERTY,但无法让我的自定义结构工作,我一直从 JavaScript 获取 (null)。
我在 AIRMapMarkerManager.m 中定义了我的 RCT_EXPORT_VIEW_PROPERTY
#import "RCTConvert+MoreMapKit.h"
RCT_EXPORT_VIEW_PROPERTY(importantStatus, ImportantStatus)
在 RCTConvert+MoreMapKit.m 我创建了我的自定义转换器
+ (ImportantStatus)ImportantStatus:(id)json
{
json = [self NSDictionary:json];
NSLog(@"json @%", json); // returns (null)
return (ImportantStatus){
[self BOOL:json[@"isImportant"]],
[self float:json[@"unimportantOpacity"]]
};
}
RCTConvert+MoreMapKit.h
+ (ImportantStatus)ImportantStatus:(id)json;
AirMapMarker.h
struct ImportantStatus {
BOOL isImportant;
float unimportantOpacity;
};
typedef struct ImportantStatus ImportantStatus;
@property (nonatomic, assign) ImportantStatus importantStatus;
MapMarker.js
importantStatus: PropTypes.shape({
isImportant: PropTypes.bool,
unimportantOpacity: PropTypes.number,
}),
我的 JS 代码发送数据
<MapView.Marker
coordinate={{
latitude: this.props.latitude,
longitude: this.props.longitude,
}}
importantStatus={{
isImportant: false,
unimportantOpacity: 0.5,
}}
// isImportant: false
// unimportantOpacity: 0.5
>
</MapView.Marker>
当我只是将它们作为上面注释的简单道具发送时,我没有使用 RCTConvert+MoreMapKit.m 中的任何自定义转换器函数就可以正常工作,所以我猜这就是我做错了什么的地方。