我正在尝试创建一个fabric组件android,特别是我想使用onClickHandler按钮组件并react-native通过 传递回调到 side RCTModernEventEmitter。它工作正常,iOS但对于 android,RCTModernEventEmitter每次我单击时都会发出两次button
这是我的规格
import type {HostComponent, ViewProps} from 'react-native';
import type {
DirectEventHandler
} from 'react-native/Libraries/Types/CodegenTypes';
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
type Event = Readonly<{
text?: string;
}>;
interface NativeProps extends ViewProps {
text: string;
onClickHandler?: DirectEventHandler<Event>; ////Event name should start with on
}
export default codegenNativeComponent<NativeProps>(
'MyButtonView',
) as HostComponent<NativeProps>;
Run Code Online (Sandbox Code Playgroud)
On native side I have created following files
public class MyButtonViewManager extends SimpleViewManager<MyButtonView> …Run Code Online (Sandbox Code Playgroud) 这是我第一次尝试连接 React-native 和原生 iOS 应用程序。
在我的react-native iOS 项目中,我创建了一个 swift 文件(创建了桥接标头),并在该 swift 文件中创建了一个示例方法来首先测试:
import Foundation
@objc(MyModule)
class MyModule: NSObject {
@objc
func testFunctionWithPromiseResolve(frame: Frame,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) {
var resp = [String:Any]() //Init Dictionary
resp.updateValue(frame, forKey: "frame");
resolve(resp);
}
@objc
static func requiresMainQueueSetup() -> Bool {
return true
}
}
Run Code Online (Sandbox Code Playgroud)
在桥接头文件中,我仅导入:
#import "React/RCTBridgeModule.h"
#import <VisionCamera/FrameProcessorPlugin.h>. //from react-native-vision-camera
#import <VisionCamera/Frame.h> //from react-native-vision-camera
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个名为的 Objective-C 文件MyModule.m,并在其中添加了:
#import <Foundation/Foundation.h>
#import "React/RCTBridgeModule.h"
@interface
RCT_EXTERN_MODULE(MyModule, NSObject);
RCT_EXTERN_METHOD(testFunctionWithPromiseResolve:
(Frame *)frame …Run Code Online (Sandbox Code Playgroud)