【发布时间】:2020-06-22 14:24:35
【问题描述】:
我有一个 json 数据,我将其列在列表中:
ListDemande: [
{
"type" : 'gift' ,
"etat" : 1,
"titreTransaction": "عدد الوحدات",
"contenuTrans": "400",
"dateTrans": "2019-07-31 17:47:31"
},
{
"type" : 'ba' ,
"etat" : 1,
"titreTransaction": "عدد الوحدات",
"contenuTrans": "500",
"dateTrans": "2019-07-31 17:31:35"
},
{
"type" : 'gift' , // problem in this item
"etat" : 0,
"titreTransaction": "عدد الوحدات",
"contenuTrans": "700",
"dateTrans": "2019-07-24 11:53:21"
},
{
"type" : 'gift' ,
"etat" : 1,
"titreTransaction": "عدد الوحدات",
"contenuTrans": "1000",
"dateTrans": "2019-07-01 16:18:03"
},
{
"type" : 'ba' ,
"etat" : 0,
"titreTransaction": "عدد الوحدات",
"contenuTrans": "200",
"dateTrans": "2019-06-13 17:39:24"
},
],
在我的项目中,我必须像这样进行有条件的重新渲染以显示gift 或ba 的图标,这取决于“类型”以及指示该项目是否有效与“etat”的条件" 取 1 或 0,这是我的方法:
const ic1 = <IconAD name="gift" size={hp('4%')}
color= {
demande.etat === 0 ?
Colors.red :
Colors.green
}
style={Styles.iconStyleBG}/>;
const ic2 = <IconAD name="tagso" size={hp('4.5%')}
color= {
demande.etat === 1 ?
Colors.green :
Colors.red
}
style={Styles.iconStyleBG}/>;
let ic;
if (demande.type === 'gift') {
ic = ic1
} else if (demande.type === 'ba'){
ic = ic2
}
const valideComp = <View style={Styles.container}>
{ic}
<View style={Styles.scoreContainer}>
<View style={Styles.scoreValueContainer}>
<Text style={[Styles.scoreUnityText, Styles.colorV]}>درهم</Text>
<Text style={[Styles.scoreValueText, Styles.colorV]}>
{demande.contenuTrans}
</Text>
<IconFA5 name="check" size={hp('2.6%')} color= {Colors.green} style={Styles.vIcStyle}/>
</View>
</View>
<View style={Styles.dateTimeContainer}>
<View style={Styles.dateContainer}>
<Text style={Styles.dateText}>{date}</Text>
</View>
<View style={Styles.TimeContainer}>
<Text style={Styles.TimeText}>{time}</Text>
</View>
</View>
</View>;
const invalideComp = <View style={Styles.container}>
{ic}
<IconAD name="tagso" size={hp('4.5%')} color= {Colors.red} style={Styles.iconStyleBG}/>
<View style={Styles.scoreContainer}>
<View style={Styles.scoreValueContainer}>
<Text style={[Styles.scoreUnityText, Styles.colorNv]}>درهم</Text>
<Text style={[Styles.scoreValueText, Styles.colorNv]}>
{demande.contenuTrans}
</Text>
<IconMCI name="timer-sand-full" size={hp('2.7%')} color= {Colors.red} style={Styles.vIcStyle}/>
</View>
</View>
<View style={Styles.dateTimeContainer}>
<View style={Styles.dateContainer}>
<Text style={Styles.dateText}>{date}</Text>
</View>
<View style={Styles.TimeContainer}>
<Text style={Styles.TimeText}>{time}</Text>
<Text style={Styles.TimeText}>{demande.type}</Text>
<Text style={Styles.TimeText}>{demande.etat}</Text>
</View>
</View>
</View>;
let comp;
if (demande.etat === 1) {
comp = valideComp
} else if (demande.etat === 0){
comp = invalideComp
}
可能这不是最好的方法,因为我是初学者,但从逻辑上讲它必须有效。
问题是它适用于所有项目,但不适用于该项目:
如果"type" : "700" 和"etat" : 0,,它会同时显示两个图标
【问题讨论】:
标签: react-native jsx