我正在构建一个反应原生的原生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)。
是否有任何我可以观看的活动,或者我必须手动观看每个道具的所有设定者以确保它们被设定?
任何想法都会受到赞赏。
谢谢。
答案 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进行更改时创建另一个实例,或者获取创建的实例并修改其属性。
我尚未确认此解决方案,但我认为该解决方案应该可以工作。 棘手的部分是如何在参数准备好之前确定视图的初始行为。
希望这个想法可以为遇到相同问题的人提供帮助(尽管我还没有尝试过,但我会在验证自己的解决方案时对此进行更新。
已更新:
在我的应用程序中尝试了此解决方案,并且可以正常工作。 棘手的部分是它的大小,目前,我将为按钮提供一个固定大小以在应用程序中呈现。