2017-02-23 34 views
0

У меня есть несколько просмотров. один является родителем, остальные - детьми.RCT_EXPORT_VIEW_PROPERTY может быть унаследован

родитель имеет поле, например: имя

У меня есть RCT_EXPORT_VIEW_PROPERTY(name, NSString); в parent.m, но он не работает.

Мне нужно скопировать RCT_EXPORT_VIEW_PROPERTY(name, NSString); всем детям.

Как наследовать RCT_EXPORT_VIEW_PROPERTY.

ответ

1

Нет, свойства не могут быть унаследованы без модификации исходного кода React-Native. React-Native ищет только методы, реализованные конкретным классом, без методов, реализуемых его суперклассами.

Вы можете определить макрос в суперкласса и использовать этот макрос внутри подклассов:

#define EXPORT_COMMON_PROPERTIES \ 
RCT_EXPORT_VIEW_PROPERTY(propertyDefinedInParent, NSString) \ 
RCT_EXPORT_VIEW_PROPERTY(anotherPropertyDefinedInParent, NSString) 

А потом в .m файл детей просто использовать

EXPORT_COMMON_PROPERTIES; 

UPDATE: Мы на самом деле не наследуя любой свойства от RCTViewManager. React-native экспортирует все собственные реквизиты из ViewManagers как константы в js-уровень. А потом он просто сцепить реквизит RCTViewManager с нашим компонентным реквизитом:

// The ViewConfig doesn't contain any props inherited from the view manager's 
    // superclass, so we manually merge in the RCTView ones. Other inheritance 
    // patterns are currenty not supported. 
    const nativeProps = { 
    ...UIManager.RCTView.NativeProps, 
    ...viewConfig.NativeProps, 
    }; 

- исходный кодом из requireNativeComponent функции. Но на собственном уровне мы не наследуем никаких свойств от RCTViewManager.

+1

Это хороший способ. Но мы наследуем много RCT_EXPORT_VIEW_PROPERTY от RCTViewManager. как RCT_EXPORT_SHADOW_PROPERTY (ширина, поплавок) RCT_EXPORT_SHADOW_PROPERTY (высота, поплавок) Как реагировать родной сделал это? –