如何在react-native ios中委派第三方组件

时间:2017-02-24 01:50:59

标签: react-native react-native-ios

我在android中有以下反应原生组件 父类包含一些常见设置, 和一些模板代码(例如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&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一样的导出?

1 个答案:

答案 0 :(得分:1)

1)如果FooChart&amp; BarChart是UIView的子类,然后你可以初始化FooChart&amp; BarChart,设置委托并直接返回

- (UIView *)view {
  FooChart *chart = [FooChart new];
  chart.delegate = self;
  return chart;
}

2)您可以使用继承共享通用设置和模板代码

3)您可以复制导出或创建一些将组合常见导出的宏。

组件实际上不会继承导出。所有组件都有RCTViewManager导出+自己的导出,但它没有使用继承。