На самом деле родитель может изменить своих потомков. Взгляните на следующий компонент-обертку:
const Wrapper = ({ childStyle, children, ...viewProps }) => (
<View {...viewProps}>
{React.Children.map(children, child =>
React.cloneElement(child, {
style: [child.props.style, childStyle],
}),
)}
</View>
);
// This will add margin to all your stars:
<Wrapper style={{flexDirection: "row",}} childStyle={{margin: 8}}>
<Icon name={'star'} color={Gold} size={14}/>
<Icon name={'star'} color={Gold} size={14}/>
<Icon name={'star'} color={Gold} size={14}/>
<Icon name={'star'} color={Gold} size={14}/>
</View>
При этом используется React.Children.map
для итерации по дочерним элементам, данным Wrapper
, а затем React.cloneElement
для их преобразования и внедрения стилей, которые мы передаем родитель.