我是swift and react-native的新手。
有一个名为NativeComp的第三方本机组件,它是UIView的子类。
我希望将其包装为react-native组件并将js属性重新映射到本机属性(一些重命名工作)
例如
js
<RNComponent config={enable:true, size:5}/>
将导致本机代码。
component.enable=true
component.size=5
方法1
RNComponent扩展NativeComp,并在此函数中添加一个新的setConfig,configue self。
它有效,但有点奇怪。
方法2 编写一个Standlone UIView类ContainerView,将NativeComp添加为子视图。
override init(frame: CoreGraphics.CGRect) {
self._component = NativeComp(frame: frame);
super.init(frame: frame);
self.addSubview(_component);
}
override func reactSetFrame(_ frame: CGRect)
{
_component.reactSetFrame(frame);
}
它看起来比方法1更清晰,但由于_component超出了ContainerView边框,因此缺少触摸事件。
如果我把它写成
override func reactSetFrame(_ frame: CGRect)
{
self.reactSetFrame(frame);
_component.reactSetFrame(frame);
}
exec bad access
self.reactSetFrame(frame);
我不太明白为什么。
将js属性重新映射到现有本机组件的正确方法是什么?
答案 0 :(得分:0)
我的错误。
self.reactSetFrame(frame)将导致无限递归。
更改为super.reactSetFrame后,一切正常。