Событие, когда все начальные реквизиты Реактивного нативного компонента пользовательского интерфейса были успешно загружены?

Я строю реактивный нативный компонент пользовательского интерфейса:

- (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];
    }
}

Вы можете удалить представление и создать другой экземпляр, когда реквизиты изменились, как описано выше, или получить созданный экземпляр и изменить его свойство, в зависимости от ваших потребностей.

Я еще не подтвердил это решение, но я думаю, что это решение должно работать. Сложной частью будет то, как мы должны определить начальное поведение представления, прежде чем параметры будут готовы.

Надеюсь, что эта идея может помочь людям с той же проблемой (хотя я еще не пробовал ее, лол, я обновлю ее, когда проверю свое собственное решение).

Обновлено:

Пробовал это решение в моем приложении, и оно работает. Самое сложное - это его размер, в настоящее время я назначу кнопке фиксированный размер для отображения в моем приложении.

Другие вопросы по тегам