2

我已经成功地为 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 中的任何自定义转换器函数就可以正常工作,所以我猜这就是我做错了什么的地方。

4

0 回答 0