我在android中有以下反应原生组件 父类包含一些常见设置, 和一些模板代码(例如setData)。
父组件
public abstract class ParentComponent<T extends Chart, U extends Entry> extends SimpleViewManager {
@ReactProp(name = "commonSettings")
public void setCommonSettings(T chart, ReadableMap propMap) {
// do common settings
}
abstract U createEntry(ReadableMap value);
@ReactProp(name = "data")
public void setData(Chart chart, ReadableArray values) {
for (int i = 0; i < values(); i++) {
chart.addEntry(values.getMap(i));
}
}
}
子组件A
public class FooComponent extends ParentComponent<FooChart, FooEntry> {
@Override
public String getName() {
return "FooChart";
}
@Override
protected View createViewInstance(ThemedReactContext reactContext) {
return new FooChart(reactContext);
}
@ReactProp(name = "fooSettings")
public void setFooSettings(FooChart chart, ReadableMap propMap) {
// do foo settings
}
@Override
FooEntry createEntry(ReadableMap value) {
return xxxxx;
}
}
子组件B
public class BarComponent extends ParentComponent<BarChart, BarEntry> {
@Override
public String getName() {
return "BarChart";
}
@Override
protected View createViewInstance(ThemedReactContext reactContext) {
return new BarChart(reactContext);
}
@ReactProp(name = "barSettings")
public void setBarSettings(FooChart chart, ReadableMap propMap) {
// do foo settings
}
@Override
BarEntry createEntry(ReadableMap value) {
return xxxxx;
}
}
我对oc&amp;迅速发展,这是我的疑惑。
在ios中,需要一个返回UIView实例的RCTViewManager
什么应该是UIView实例?
我不想继承FooChart&amp; BarChart,代表是我所需要的。
那么我应该创建一个自定义UIView,初始化一个fooChart并保存它的引用,然后是self.addSubView(fooChart)?
如何共享常用设置和模板代码?扩展?
我是否必须在FooChartViewManager和BarChartViewManager中复制RCT_EXPORT_VIEW_PROPERTY(commonSettings, NSDictionary)
?
我试图定义class ParentComponentManagerSwift: RCTViewManager
,
并在那里声明RCT_EXPORT_VIEW_PROPERTY(commonSettings, NSDictionary)
,
和class FooComponentManagerSwift: ParentComponentManager
,但它不起作用
但是我们的组件会继承像RCTViewManager中声明的backgroundColor / width / height一样的导出?
答案 0 :(得分:1)
1)如果FooChart&amp; BarChart是UIView的子类,然后你可以初始化FooChart&amp; BarChart,设置委托并直接返回
- (UIView *)view {
FooChart *chart = [FooChart new];
chart.delegate = self;
return chart;
}
2)您可以使用继承共享通用设置和模板代码
3)您可以复制导出或创建一些将组合常见导出的宏。
组件实际上不会继承导出。所有组件都有RCTViewManager导出+自己的导出,但它没有使用继承。