是否有一种有效的方式通过考虑传递的值来为元素分配颜色,而无需对每个组件重复执行代码?
例如,我有这个:
如果value :'high'
的文字颜色应为red
。
如果value :'low'
的文字颜色应为green
。
这是我的代码,但是我必须在所有组件中添加switch
语句,并且看起来很混乱,尤其是要添加更多颜色。
const list1 = [
{
title: 'One',
temperature: 'very high',
},
{
title: 'Two',
temperature: 'high',
},
{
title: 'Three',
temperature: 'medium',
},
{
title: 'Four',
temperature: 'low',
},
{
title: 'Five',
temperature: 'very low',
},
];
export default class Regional extends Component {
constructor(props) {
super(props);
this.state ={
dataSource: list1
}
}
render() {
const { dataSource } = this.state;
const showData = dataSource.map((l, i) => {
let myColor = 'blue';
switch (l.temperature) {
case 'high':
myColor = 'red';
break;
case 'medium':
myColor = 'yellow';
break;
case 'low':
myColor = 'green';
break;
default:
myColor = 'grey';
}
return(
<View style={{flex: 1, flexDirection: 'column'}} key={i}>
<Text style={{flex: 1, color:myColor}}>{l.temperature}</Text>
</View>
)
})
return (
<View>
{showData}
</View>
)
}
}
这很好用,但是我在很多组件中都有它。
如果这是最好的解决方案而又不复杂,那么我对此并不满意,因为它只是重复和多余的行。
任何建议都值得赞赏。谢谢!
答案 0 :(得分:2)
您可能有一个对象colors
,其中的键是不同的温度,值是颜色。如果温度不是对象的属性,则可以回退到'grey'
。
const colors = {
high: "red",
medium: "yellow",
low: "green"
};
class Regional extends React.Component {
constructor(props) {
super(props);
this.state = {
dataSource: list1
};
}
render() {
const { dataSource } = this.state;
const showData = dataSource.map((l, i) => {
let myColor = colors[l.temperature] || "grey";
return (
<View style={{ flex: 1, flexDirection: "column" }} key={i}>
<Text style={{ flex: 1, color: myColor }}>{l.temperature}</Text>
</View>
);
});
return <View>{showData}</View>;
}
}