如果重复,请原谅。我正在开发一个使用react-native在第三方Instagram应用程序中共享其帖子的应用程序。我到处搜索,发现没有可用于react-native的功能,但在native-ios和native-android中可用。我试图在native-ios(objective-c)中实现,并为此找到了很多代码,但是我有点困惑,无法开发我的功能。有人可以在这里逐步解释吗?通过执行以下代码,我已经完成了将本机ios文件与react-native链接起来的事情。
.h文件
#ifndef Instashare_h
#define Instashare_h
#import "React/RCTBridgeModule.h"
@interface Instashare : NSObject <RCTBridgeModule>
@end
#endif /* Instashare_h */
.m文件
#import "Instashare.h"=
#import "React/RCTLog.h"
@implementation Instashare
// This RCT (React) "macro" exposes the current module to JavaScript
RCT_EXPORT_MODULE();
// We must explicitly expose methods otherwise JavaScript can't access anything
RCT_EXPORT_METHOD(get)
{
NSLog(@"explanation code here");
}
@end
React-native.js文件
var InstagramShare = NativeModules.Instashare;
export default class ShareComponents extends PureComponent {
_handleInsta = () => {
InstagramShare.get();
}
render{
return(
<TouchableOpacity
onPress={() => this._handleInsta()}
>
<Text>Instagram</Text>
</TouchableOpacity>
);
}
}
答案 0 :(得分:0)
本机模块只是实现RCTBridgeModule
协议的Objective-C类。如果您想知道, RCT 是 ReaCT 的缩写。
// Instashare.h
#import <React/RCTBridgeModule.h>
@interface Instashare : NSObject <RCTBridgeModule>
@end
除非明确告知,否则 React Native不会将 Instashare 的任何方法公开给JavaScript。这是通过RCT_EXPORT_METHOD()
宏完成的:
#import "Instashare.h"
#import <React/RCTLog.h>
@implementation Instashare
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(get:(NSString *)name location:(NSString *)location)
{
NSLog(@"explanation code here");
}
@end
用法
import {NativeModules} from 'react-native';
var Instashare = NativeModules.Instashare;
Instashare.get();