Событие, когда все начальные реквизиты Реактивного нативного компонента пользовательского интерфейса были успешно загружены?
Я строю реактивный нативный компонент пользовательского интерфейса:
- (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)
// ...
Мне нужно что-то делать, когда в моем модуле есть ВСЕ из этих реквизитов (иначе, когда реквизиты были успешно перенесены в мой компонент UI через мост RN).
Могу ли я наблюдать за каким-либо событием или мне нужно вручную наблюдать за всеми установщиками каждого винта, чтобы убедиться, что они установлены?
Любые идеи были бы хорошы.
Спасибо.
1 ответ
Я сталкиваюсь с той же проблемой сегодня.
Официального способа передачи начальных свойств менеджеру не существует.
Тогда я думаю, что, возможно, единственное решение - сначала вернуть пустое представление, а затем добавить в него свое собственное представление после того, как ваши реквизиты будут готовы.
Я планирую сделать что-то вроде этого:
- (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];
}
}
Вы можете удалить представление и создать другой экземпляр, когда реквизиты изменились, как описано выше, или получить созданный экземпляр и изменить его свойство, в зависимости от ваших потребностей.
Я еще не подтвердил это решение, но я думаю, что это решение должно работать. Сложной частью будет то, как мы должны определить начальное поведение представления, прежде чем параметры будут готовы.
Надеюсь, что эта идея может помочь людям с той же проблемой (хотя я еще не пробовал ее, лол, я обновлю ее, когда проверю свое собственное решение).
Обновлено:
Пробовал это решение в моем приложении, и оно работает. Самое сложное - это его размер, в настоящее время я назначу кнопке фиксированный размер для отображения в моем приложении.