Каскадный цвет текста со стилизованными компонентами в React Native

Я пытаюсь создать компонент с React Native, который включает компонент <Text> внутри обернутого компонента:

const MyComponent = props => (
  <View {...props}>
   <Text {...props}>Hello world</Text>
  <View>
)

const MyRedComponent = styled(MyComponent)`
  color: #000;
  margin-left: 10px;
  background: #F00;
`

Я составляю свой компонент таким образом, чтобы я мог изменить цвет текста из того же стилизованного компонента, как я меняю цвет фона:

const MyBlueComponent = styled(MyRedComponent)`
  color: #FFF;
  background: #00F;
`

Однако при таком подходе возникает проблема, заключающаяся в том, что все стили применяются к компоненту <Text>, а не только к color; в этом примере компонент <Text> также получает стиль margin-left из родительских стилей, что не является предпочтительным. Я только хочу, чтобы цвет текста передавался каскадом компоненту <Text>.

Возможно ли это с использованием стилизованных компонентов с React Native?

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
0
941
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете создать функцию-оболочку с помощью StyleSheet.flatten и выбрать цвет из полученного объекта:

const MyComponent = props => (
  <View {...props}>
    <Text style = {{ color: StyleSheet.flatten(props.styles).color }}>Hello world</Text>
  <View>
)

const MyRedComponent = styled(MyComponent)`
  color: #000;
  margin-left: 10px;
  background: #F00;
`

Имеет смысл выделить пикировку в собственную функцию. Например, вы можете создать следующую оболочку:

const pickColorFromStyles = styles => {
  const { color } = StyleSheet.flatten(styles)
  return { color }
}

... и используйте эту функцию в своем компоненте:

const MyComponent = props => (
  <View {...props}>
    <Text style = {pickColorFromStyles(props.styles)}>Hello world</Text>
  <View>
)

Обратите внимание на предупреждение при использовании StyleSheet.flatten со страницы документации:

NOTE: Exercise caution as abusing this can tax you in terms of optimizations. IDs enable optimizations through the bridge and memory in general. Refering to style objects directly will deprive you of these optimizations.

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