1

我正在构建一个 react-native原生 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 组件时),我需要做一些事情。

有什么我可以观看的事件,还是我必须手动观看每个道具的所有设置器以确保它们已设置?

任何想法,将不胜感激。

谢谢你。

4

1 回答 1

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 像上面一样发生变化时,您可以删除视图并创建另一个实例,或者获取创建的实例并修改其属性,这取决于您的需要。

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

希望这个想法可以帮助有同样问题的人(虽然我还没有尝试过,哈哈,当我验证我自己的解决方案时我会更新这个。

更新:

在我的应用程序中尝试了这个解决方案并且它有效。棘手的部分是它的大小,目前我会给按钮一个固定大小以在我的应用程序中呈现。

于 2018-10-19T08:39:32.517 回答