问题
What is the best way to export a method with a return value in React Native?
I know there is RCT_EXPORT_METHOD
, but that only works for methods that are (void)
and therefore don't return anything. Preferably I don't need to export the whole class, just a few methods.
The other option would be to have a callback, but I would like to avoid that if possible as it bloats up the code too much in my use case. Are there are any other options I might have missed?
回答1:
You can also now use promises, which tend to look a little nicer in your JS.
Objective C:
RCT_REMAP_METHOD(getThing, resolver: (RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
if( condition ) {
NSString *thingToReturn = @"ALL OK";
resolve(thingToReturn);
} else {
reject([NSError errorWithDomain:@"com.companyname.app" code:0 userInfo:@{ @"text": @"something happend" }]);
}
}
Then in JS:
async onPress() {
try {
const status = await CustomModule.getThing();
// do something with status
} catch(e) {
console.error(e);
}
}
回答2:
Try return values with Callbacks
RCT_EXPORT_METHOD(findEvents:(RCTResponseSenderBlock)callback)
{
NSArray *events = ...
callback(@[[NSNull null], events]);
}
回答3:
Seems no way yet. That should be a feature to support.
来源:https://stackoverflow.com/questions/29771622/react-native-how-to-export-a-method-with-a-return-value