反応ネイティブのネイティブUIコンポーネントを作成しようとしていますが、イベントシステムの仕組みを理解する上で問題があります。私はドキュメントを読んだことがあります。残念ながら、obj-cに特有なので、特にあまり便利ではありませんでした。スウィフトもあまり快適ではありませんが、私は現時点で学んでいる言語です。以下のコードは私がこれまでに持っていたものであり、アプリケーションはちゃんとロードされます(XCodeでは問題ありません)。RCTDirectEventBlockを呼び出すとJSコードがトリガーされない
CustomViewManager.swift
import Foundation
@objc(CustomViewManager)
class CustomViewManager : RCTViewManager {
override func view() -> UIView! {
return CustomView();
}
}
CustomViewManagerBridge.m
#import "RCTBridgeModule.h"
#import "RCTViewManager.h"
@interface RCT_EXTERN_MODULE(CustomViewManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(onPress, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(list, NSArray)
@end
CustomView.h
#import "RCTView.h"
@interface CustomView : RCTView
@property (nonatomic, assign) NSArray *list;
@property (nonatomic, copy) RCTDirectEventBlock onPress;
@end
CustomView.swift
import Foundation
import UIKit
@objc(CustomView)
class CustomView : UIView {
var list: [CGFloat]? {
didSet {
print("set list")
}
}
override init(frame: CGRect) {
super.init(frame: frame);
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setOnPress(callback: RCTDirectEventBlock) {
print("set onPress", callback)
let dict:[NSObject:AnyObject] = [
"hello": "world",
]
callback(dict)
}
}
そして、以下のコードを使用して反応するからそれを呼び出す:
は<CustomView list={[1,2,3]} onPress={data => console.log('js', data)} />
これはある程度正常に動作します。私は迅速なコードから渡される小道具にアクセスすることができます。私はリストとonPress関数を取得します。 しかし、私がcallback
と呼ぶとき、console.log
は引き起こされず、私はなぜそれほど確かではありません。どんな助力があれば幸いです。
おかげで、 ゴルダン