【问题标题】:Check if color is a string ('white' === color? // true, 'bright white gold' === color? // false)检查颜色是否为字符串('white' === color? // true, 'bright white gold' === color? // false)
【发布时间】:2019-05-14 19:52:22
【问题描述】:

我有多个来自数据库的颜色字符串。对于每种颜色,我将其转换为小写,然后通过内联样式传递:

const color-picker-item = color => (
    <View style={{backgroundColor: color.toLowerCase()}} />
)

当传递的颜色是有效的 css 颜色字符串(如“RED”和“WHITE”)时,这工作得很好,但现在我得到了只是显示为默认白色的时髦颜色字符串。有没有办法改变这个默认颜色,所以如果颜色不是有效的字符串颜色,那么显示这个其他颜色。

我检查了this solution out,但它使用了new Option.style,它不适用于本机反应。还有其他推荐吗?

看起来无效的颜色有超过 1 个字,所以我可以做一个空白检查,但希望有另一个解决方案!

【问题讨论】:

标签: javascript css reactjs react-native


【解决方案1】:

只是一个想法。

您可以做的事情是创建有效颜色列表并检查该颜色是否为有效颜色,否则设置为红色或您喜欢的任何颜色。您可以使用默认颜色创建变量,或将其放在有效颜色列表的第一个索引中并将其用作默认值。

const awesomeColors = ['RED', 'GREEN', 'BLUE']

const isAwesomeColor = colorToCheck => 
     awesomeColors.some(color => color === colorToCheck) 


const color-picker-item = color => (
    <View style={{backgroundColor: isAwesomeColor(color) ? color.toLowerCase() : awesomeColors[0].toLowerCase()}} />
)

【讨论】:

  • 如果我将所有 140 种颜色都放在这样的数组中,这个想法就可以工作。这是一个解决方案,但我希望不要走那条路。我会继续搜索,但感谢您的帮助!
  • 你在哪里定义了颜色?在数据库中?
【解决方案2】:

这可以通过多种方式解决。我能想到的最干净的方法是根据所有有效的颜色关键字检查颜色。但是,如果您只想在失败时设置默认颜色,还有一种更简单的方法。

CSS!只需添加一个类名,例如

<View className='defaultcolorfallback'/>

并将其添加到您的 css 中:

.defaultcolorfallback {
  background-color: #123456;
}

只要提供的背景颜色失败,它就会回退到设置的背景颜色。

如果你不想碰你的 css,并且你不介意把所有的 hackytackity 弄脏,这样做:

<View style={{background: '#123456', backgroundColor: color.toLowerCase()}} />

它不漂亮,但它有效!

【讨论】:

  • 我试过了:const styles = StyleSheet.create({ container: backgroundColor: 'black' }} &lt;View style={[styles.container, {backgroundColor: color.toLowerCase()}]} /&gt; 但这似乎不起作用。这就是你的意思,对吧?设置默认背景颜色以防color.toLowerCase() 不起作用?
  • 我的意思是设置默认颜色,但是,正如您所指出的,这行不通。如果您使用脏的background attr 而不是backgroundColor,这可能会起作用。在我的示例中,您的默认值需要是类绑定的,并且您需要将 View 指定为 className
猜你喜欢
  • 2019-06-01
  • 2015-10-01
  • 2020-08-11
  • 2021-11-12
  • 2022-11-16
  • 2021-06-29
  • 2022-10-25
  • 2020-09-20
  • 1970-01-01
相关资源
最近更新 更多