如何在 react-native 中委托第三方组件 ios
How to delegate third-party components in react-native ios
我在 android 中有以下 React 本机组件。
parent class 包含一些常用设置,
和一些模板代码(例如 setData)。
android版本
父组件
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;
}
}
但是我应该如何在 ios 中实现这些?
我对 oc 和 swift 开发还很陌生,这是我的疑惑。
在ios中,需要一个RCTViewManager return一个UIView实例。
UIView 实例应该是什么?
我不想继承FooChart & BarChart,delegate是我需要的
那么我应该创建一个自定义 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?
1)如果FooChart & BarChart是UIView的子类,那么可以直接初始化FooChart & BarChart,设置delegate和return
- (UIView *)view {
FooChart *chart = [FooChart new];
chart.delegate = self;
return chart;
}
2) 您可以使用继承共享常用设置和模板代码
3) 您可以复制导出或创建一些宏来合并通用导出。
组件实际上不继承导出。所有组件都有 RCTViewManager 导出 + 自己的导出,但它是在不使用继承的情况下完成的。
我在 android 中有以下 React 本机组件。
parent class 包含一些常用设置,
和一些模板代码(例如 setData)。
android版本
父组件
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;
}
}
但是我应该如何在 ios 中实现这些?
我对 oc 和 swift 开发还很陌生,这是我的疑惑。
在ios中,需要一个RCTViewManager return一个UIView实例。
UIView 实例应该是什么?
我不想继承FooChart & BarChart,delegate是我需要的
那么我应该创建一个自定义 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?
1)如果FooChart & BarChart是UIView的子类,那么可以直接初始化FooChart & BarChart,设置delegate和return
- (UIView *)view {
FooChart *chart = [FooChart new];
chart.delegate = self;
return chart;
}
2) 您可以使用继承共享常用设置和模板代码
3) 您可以复制导出或创建一些宏来合并通用导出。
组件实际上不继承导出。所有组件都有 RCTViewManager 导出 + 自己的导出,但它是在不使用继承的情况下完成的。