gpt4 book ai didi

objective-c - 调用 RCTDirectEventBlock 不会触发 JS 代码

转载 作者:搜寻专家 更新时间:2023-11-01 05:36:06 25 4
gpt4 key购买 nike

我正在尝试为 react-native 编写一个原生 UI 组件,但我在弄清楚事件系统的工作原理时遇到了一些麻烦。我已经通读了文档,不幸的是它并不是特别有用,主要是因为它特定于我不太熟悉的 obj-c。对 Swift 也不太熟悉,但这是我目前正在尝试学习的语言。下面的代码是我目前所拥有的,我的应用程序加载得很好(在 XCode 中没有问题)。

自定义 View 管理器.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

自定义 View .h

#import "RCTView.h"
@interface CustomView : RCTView
@property (nonatomic, assign) NSArray *list;
@property (nonatomic, copy) RCTDirectEventBlock onPress;
@end

自定义 View .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)
}

}

然后使用下面的代码从 React 中调用它:

<CustomView list={[1,2,3]} onPress={data => console.log('js', data)} />

这在一定程度上工作得很好。我可以访问从 swift 代码传递的 Prop 。我得到了列表和 onPress 函数。 但是,当我调用 callback 时,console.log 没有被触发,我不太清楚为什么。 任何帮助将不胜感激.

谢谢,戈登

最佳答案

好的,

事实证明我使用了不正确的属性类型。将 RCTDirectEventBlock 更改为 RCTBublingEventBlock 就可以了。

关于objective-c - 调用 RCTDirectEventBlock 不会触发 JS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com