当前位置: 首页 > 知识库问答 >
问题:

在React Native上使用样式化组件级联文本颜色

柯星辰
2023-03-14

我正在尝试创建一个包含

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;
`

但是,这种方法存在一个问题,即所有样式都应用于

这是否可能使用带有React Native的样式化组件?


共有1个答案

归浩博
2023-03-14

您可以使用样式表创建包装函数。展平并从结果对象中拾取颜色:

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>
)

注意使用样式表时出现的警告。从文档页面展平

注意:谨慎行事,因为滥用它会在优化方面加重你的负担。ID通常通过网桥和内存启用优化。直接引用样式对象将剥夺这些优化。

 类似资料:
  • 我正在使用react-native和styled组件做一个应用程序,我想让文本在图像下可见。我返回的代码是这样的: 我想能够为新狗和{photo.breeds[0].name}{photos.breeds[0].letrich}的点击屏幕设置样式,但我想分别设置它们的样式。 现在我的样式看起来像这样(wisch针对两个文本区域) 有人知道如何编写代码,让它为不同的文本部分创建某种“类名”或其他标识

  • Button组件通常由Text元素组成,该元素用TouchableHighlight(或其他touchable)包装。我正在尝试创建一个使用styled-components样式的按钮组件,但是我的样式很难动态响应道具。 下面,我创建了一个按钮组件,类似于样式化组件文档中的Adapting based on props示例。 导入后,我用的按钮是这样的... 所以,我希望我的纽扣看起来像这样...

  • 本文向大家介绍ReactNative Image组件使用详解,包括了ReactNative Image组件使用详解的使用技巧和注意事项,需要的朋友参考一下 最近学习ReactNative感觉到挺有意思的,在学习的过程中,发现网上一些人写的文章内容过时了,这主要是ReactNative的版本升级太快,如果你现在看一篇16甚至15年写的文章,把知识点和官方文档对比下,会让你大跌眼镜。所以奉劝各位想学习

  • 我有以下样式的组件: 其中主题是: 我收到以下打字错误: 类型“未定义”不能用作索引类型。 不知道为什么假设是未定义的,如果它是在中定义的-我如何让TypeScript识别这一点?

  • 我在React web上使用样式化组件已经有一段时间了,但最近我开始开发一个React Native应用程序,我决定在中使用样式化的组件。当设计只有属性的组件时,比如默认的components,这是非常好的。 但是,我遇到的问题是,当我需要为具有多个样式属性的更复杂的组件设置样式时,例如、等。 当只有一个样式属性具有不同的名称时,我可以执行以下操作: 这完美无缺,但是当组件具有多种样式时,我不知道

  • 我在使用带有样式化组件的s时遇到困难。当我尝试在下面的类方法中访问它们时,会出现以下错误: Edit.js:42未捕获类型错误:此…..包含的不是函数 我从这个问题中找到了密码 我到底做错了什么?