反应原生Native UI组件的所有初始道具已成功加载的事件?

时间:2017-10-17 13:06:03

标签: react-native react-native-native-module react-native-native-ui-component

我正在构建一个反应原生的原生UI组件

- (UIView *)view
{
    return [[MyComponent alloc] initWithBridge:self.bridge];
}

我正在暴露这样的道具:

RCT_EXPORT_VIEW_PROPERTY(prop1, NSDictionary)
RCT_EXPORT_VIEW_PROPERTY(prop2, NSDictionary)
RCT_EXPORT_VIEW_PROPERTY(prop3, NSDictionary)
// ...

当我的模块具有所有可用的道具时,我需要做东西(当道具通过RN桥成功转移到我的原生UI组件时,a.k.a)。

是否有任何我可以观看的活动,或者我必须手动观看每个道具的所有设定者以确保它们被设定?

任何想法都会受到赞赏。

谢谢。

1 个答案:

答案 0 :(得分:0)

我今天遇到了同样的问题。

没有将初始属性传递给经理的正式方法。

然后我认为,也许唯一的解决方案是首先返回一个空视图,然后在道具准备好后将自定义视图添加到其中。

我打算做这样的事情:

- (UIView *)view
{
    return [[View alloc] init];
}

RCT_CUSTOM_VIEW_PROPERTY(params, NSDictionary, UIView)
{
    NSDictionary *params = json ? [RCTConvert NSDictionary:json] : nil;
    if (params) {
        MyComponent *subview = [view viewWithTag:YOUR_CUSTOM_VIEW_TAG];
        if (subview != nil) {
            [subview removeFromSuperview]
            subview = nil;
        }
        subview = [[MyComponent alloc] initWithParams:params];
        subview.tag = YOUR_CUSTOM_VIEW_TAG;
        [view addSubview:subview];
    }
}

根据需要,您可以删除视图并在props进行更改时创建另一个实例,或者获取创建的实例并修改其属性。

我尚未确认此解决方案,但我认为该解决方案应该可以工作。 棘手的部分是如何在参数准备好之前确定视图的初始行为。

希望这个想法可以为遇到相同问题的人提供帮助(尽管我还没有尝试过,但我会在验证自己的解决方案时对此进行更新。

已更新:

在我的应用程序中尝试了此解决方案,并且可以正常工作。 棘手的部分是它的大小,目前,我将为按钮提供一个固定大小以在应用程序中呈现。